5.문자열 클래스

Edit

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의 문자열 클래스와 마찬가지입니다.