ProudNet은 문자열 클래스 Proud.String, Proud.StringA를 제공합니다.
문자열 클래스는 문자열을 ATL이나 STL의 문자열 클래스처럼 간편하게 문자열을 다룰 수 있게 해줍니다. 예를 들면 아래와 같습니다.
Proud::String a; // 빈 문자열 a = L"123"; // 문자열에 값 넣기. puts(a); // a 자체가 직접 문자열 버퍼를 제공한다. a += L"abc"; // 문자열에 다른 문자열 덧붙이기 if(L"123abc" == a) // 문자열의 내용 비교 방법 { a.Replace(L"123", "def"); // 문자열 내용 치환 }
ProudNet의 대부분의 API는 Proud.String을 사용합니다. 일부 API는 Proud.StringA를 사용합니다.
참고
5.1문자열 만들기 기능(format)
Proud.StringT는 sprintf()처럼 문자열 만들기 기능을 제공합니다.
Proud::String a; a.Format(L"%d %d %s", 1, 2, L"hahaha"); // 이제 a = "1 2 hahaha"가 됩니다.
5.3문자열 처리 성능
Proud.StringT는 문자열 처리의 성능도 고려하여 개발되었습니다. 이에 따라 다음과 같은 특징이 있습니다.
Copy-on-write
Proud.StringT의 copy-on-write 기능은 문자열이 꼭 필요한 경우에만 사본이 떠집니다. 그 전에는 문자열 데이터를 서로 공유하게 됩니다.
Proud::String a = L"abc"; // a는 문자열 'abc'를 소유 Proud::String b = a; // b는 a와 같은 문자열 데이터를 공유 Proud::String c = b; // 이제 a,b,c는 모두 같은 문자열 데이터를 공유 c = L"bcd"; // a,b는 여전히 문자열 데이터 'abc'를 공유하고 있으나 c는 더 이상 공유를 하지 않고 'bcd'를 별도로 소유 b = c; // b는 a와의 'abc' 공유를 포기하고 c가 가진 'bcd'를 공유
문자열 길이 측정
Proud.StringT.GetLength는 호출 즉시 미리 측정되었던 문자열 길이를 리턴합니다. 즉 strlen()과 다릅니다.
5.4문자열 클래스의 스레드 안정성
Proud.StringT는 int나 float와 마찬가지로 thread safe하지 않습니다. 따라서 여러 스레드에서 동시에 같은 문자열 객체를 접근하는 것은 (모든 스레드가 읽기만 하는 경우를 제외하고) 안전하지 않습니다.
이 점은 ATL이나 STL의 문자열 클래스와 마찬가지입니다.