CString의 위험성...???
안녕하세요. 강의를 거의 다 들었네요.
쓰레드와 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 클래스 인스턴스가 계속 남아 워킹 메모리 크기를 지속적으로 늘리는 문제를 야기할 수 있습니다.
사실 이런 문제는 실무에서 겪어보면 알게 되는 것으로 매우 당황스러운 특징이라 할 수 있습니다. 아마도 이러한 내부적인 특성을 알고 있는지 확인하려 했던 것 같습니다. 참고하시기 바랍니다. 😄
패키지 구분에 대해 궁금한게 있습니다
0
8
1
스프링부트 서버 에러나요
0
17
1
코드를 첨부해야하는 이유가 있나요?
0
20
2
간단한 오타 제보입니다.
0
19
1
큰 범위 조회 시 EXPLAIN의 rows 값이 정확하지 않은 이유가 궁금합니다.
0
35
2
실제 FK제약조건을 설정하지 않는이유
0
35
2
조회속도 개선에서 더 개선하는 방법이 궁금합니다.
0
28
2
라이브 운영중인 환경의 테이블에 인덱스 추가시 고려사항
0
36
2
JPA Repository 질문이 있습니다!
1
33
2
페이지네이션 처리를 쿼리에서 하는 방식 질문
1
36
1
비동기 스레드풀 분리 이유와 Virtual Thread 전환 시 고려사항
0
35
1
수강기간 연장
0
27
1
Build 관련 문제 (테스트 관련 문제)
0
43
2
BCNF 질문
0
49
2
consumer에서 에러가 발생할 경우 데이터 유실 문의
0
38
2
게시글 테스트 데이터 삽입
0
43
2
Orchestration SAGA 패턴 보상에 대한 질문입니다.
0
51
2
연관 엔티티 네이밍 규칙
0
40
1
히스토리 관련 질문
0
58
2
윈도우 개발 튜토리얼
0
87
1
MFC_Windows_programming_-_응용_-_인쇄용.pdf 파일이 열리지 않습니다.
0
159
1
수업자료
0
119
2
수업자료
0
106
1
자료 다운로드 관련
0
157
2

