C++ 공부

C++에서 char 배열과 std::string의 차이점

Client Side 2025. 8. 21. 18:21

비유하자면

 

char배열(char[ ])은 마치 우리가 어릴 대 쓰던 수동 카메라와 같다.

  • 필름(메모리)을 미리 딱 정해진 칸만큼 넣어야 하고 (고정된 크기).
  • 사진(문자) 한 장 한 장을 필름에 직접 손으로 붙여야 한다. (NULL 문자 \0으로 끝냄)
  • 사진을 추가하거나 편집하려면, 다른 필름으로 옮기거나 새로운 사진을 추가할 때 일일이 자르고 붙이고 해야 한다.(strcpy, strcat 같은 함수 사용)
  • 필름이 모자라면 큰일난다! (버퍼 오버플로우 발생 위험)

std::string은 요즘 쓰는 스마트폰 카메라와 같다.

  • 사진을 얼마나 찍을지 미리 정하지 않아도 된다. (동적인 크기)
  • 알아서 사진첩에 착착 저장해주고 (자동 메모리 관리)
  • 사진을 추가하거나 (덧셈 + 연산), 수정하고 (멤버 함수 사용), 지우는게 엄청 편하다.
  • 사진첩 용량이 모자라면 알아서 확장해준다. (메모리 자동 할당)
  • 쓰기 편하고, 똑똑하고, 안전하다.

더 자세한 기술적인 차이점

        특징                     char 배열 (C-스타일 문자열)                           std::string (C++ 문자열 클래스)

선언 방식 char myString[10]; (고정 길이) string myString; or string myString = "Hello";
크기 고정 (선언 시 할당) 동적 (필요에 따라 자동 확장/축소)
메모리 관리 개발자가 직접 관리 (new, delete, ``malloc, free` 등) 자동 관리 (클래스가 알아서 처리)
널 종료 반드시 문자열 끝에 \0(널 문자)이 있어야 함 클래스 내부에서 자동으로 관리
기능 문자열 처리를 위해 <cstring> (C언어의 <string.h>) 라이브러리 함수(strcpy, strcat, strlen, strcmp 등) 사용 다양한 멤버 함수(length(), append(), find(), substr() 등) 및 연산자 오버로딩(+, =, ==, <, >) 제공
안전성 버퍼 오버플로우, 메모리 누수 등 오류 발생 가능성 높음 자동 메모리 관리로 인해 훨씬 안전
편의성 다소 불편하고 에러 발생 가능성이 높음 직관적이고 편리하며, 코드가 간결해짐