강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

just kim님의 프로필 이미지
just kim

작성한 질문수

MFC Windows 프로그래밍 - 응용

메시지 루프 다중화

CString의 위험성...???

해결된 질문

작성

·

65

0

안녕하세요. 강의를 거의 다 들었네요.

쓰레드와 DB 꽤 좋은 강의를 듣고 네트워크 강의까지 있길래 수강 신청까지 했어요.

다음 프로젝트가 여러 클라이언트에 저장된 대용량 파일을 서버로 보내고 필요할땐 서버의 데이터를 유튜브 처럼 보는 기능을 구연할껀데 네트워크 강의가 도움이 될거 같아서요.

 

어째건 강의를 끝까지 시청하고 CString을 잘 쓰고 계시더라구요. 저도 CString를 잘 쓰고 있습니다.

 

근데 옛날에 면접 볼때 CString을 어떻게 생각 하시나요? 저는 CString를 쓰면 안된다고 생각하는데 써야될가요? 라는 질문을 받았습니다.

 

제 경험상으로는 MFC로 작성된 Dll의 함수의 인자가 CString로 되어 있을때 WinAPI32 개발하는 저로서는 CString 으로 넘겨 줘야할땐 많이 귀찮죠. WinAPI32는 CString가 지원 안되니깐 그래서 대답을 프로그램의 상호 호완에 문제가 되니깐 쓰면 안되겠죠? 라고 대답했어요.

 

그러니까 면접 관이 다른 이유는 없나요? 라고 다시 묻더라구요. 좀 생각해 낸거가 CString가 문자 지원 변환 기능을 많이 지원 해주니깐 나중 프로그램 개발에 사고력이 떨어지기 땜에 그런거라니깐 고개를 갸웃 거리면서 아니라는 표정을 하더라구요.

 

이 두개도 아니면 CString가 Class니깐 NULL 위험성?? 이건 대답 하지 않았습니다.

 

왜 면접관이 CString를 쓰지 말라고 했을까요?

 

 

답변 1

1

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

CString 클래스는 매우 특수한 클래스 입니다. 다른 클래스 인스턴스들과 달리 마치 char* 처럼 작동할 수 있도록 메모리 구조를 가지고 있는데다 메모리 운영효율을 위해 내부적으로는 더 큰 메모리를 가지고 있습니다.

만일 CString 클래스 인스턴스 str을 선언한 후 최대 길이가 1000글자 정도 되는 데이터를 저장했다가 100글자 정도되는 문자열로 대체 할 경우(str = "100글자문자열";) 여전히 메모리는 1000글자를 저장 할 수 있는 공간을 유지 합니다. 이게 또 항상그런 것은 아니라 할 수 있는데 아무튼 워킹 메모리 영역을 1000글자 저장 할 수 있는 정도를 유지하는 것은 확실합니다.

이런 특징은 장기간 작동해야 하는 서버 개발 시 큰 문제가 될 수 있습니다. 특정 CString 클래스 인스턴스가 계속 남아 워킹 메모리 크기를 지속적으로 늘리는 문제를 야기할 수 있습니다.

사실 이런 문제는 실무에서 겪어보면 알게 되는 것으로 매우 당황스러운 특징이라 할 수 있습니다. 아마도 이러한 내부적인 특성을 알고 있는지 확인하려 했던 것 같습니다. 참고하시기 바랍니다. 😄

just kim님의 프로필 이미지
just kim

작성한 질문수

질문하기