[ 개발 잡소리 ] 문자열

2024. 3. 12. 10:13개발잡소리

문자열은 무엇일까

간단하게 결론부터 말하자면 문자의 배열이다

 

그렇다면 그냥 문자만의 배열일까?

#include <iostream>

int main() {
	char str[] = { 'M', 'I','N', 'G' };
	std::cout << str;

	return 0;
}

로 C++코드를 짜보았다

 

char은 1byte의 문자를 나타내는 자료형이다

문자들의 나열인 문자열을 만들어 출력해보려 한다

 

이 코드를 실행시켜 보자

MING 까지는 잘 출력되었으나

뒤에 무언가 알 수 없는 문자들이 나열되어 있다

 

왜 이런 현상이 발생하는 것일까?

컴퓨터는 위와 같이 문자배열을 선언할 시 문자열의 끝이 어디인지 알지 못한다

따라서 컴퓨터가 알아먹게 설명하기 위해서는 문자열의 끝에  NULL을 넣어줘야 한다

 

그런데 char 배열에 NULL을 어떻게 넣을까

'\0'을 마지막 문자에 넣어주면 된다

코드를 고쳐서 새로 시도해 보자

#include <iostream>

int main() {
	char str[] = { 'M', 'I','N', 'G', '\0'};
	std::cout << str;

	return 0;
}

 

아주 잘 작동하는 모습이다

 

하지만 문자열을 사용하려면

이런 귀찮은 작업을 해야 할까?

 

콤마로 문자 하나하나를 나눠가며 마지막에 null까지 넣어주는 번거로운 작업을 생략하기 위해

C++의 경우 String 클래스를 지원한다

(사실 js나 C# 같이 개발 접근성이 조금만 높아진 언어만 해도 string이 기본 자료형으로 들어가 있다)

 

#include <iostream>
#include <string>
using namespace std;

int main() {
	string name = "mingming";

	return 0;
}

문자열을 만들기가 굉장히 간단해졌다


 

이 정도만 해도 char배열과 string은 코딩하는 측면에서

굉장히 가독성도 좋아지고 큰 차이가 있다.

하지만 이 가독성 못지않은 다른 큰 차이가 있다

 

무엇일까?

 

char 배열은 한번 선언하면 배열의 길이를 바꿀 수 없다 (정적배열이기 때문이다)

하지만 string은 선언 후 값이 변경되어 길이가 변경되어도 문제가 발생하지 않는다 

 

우리가 일반적으로 알고 있는  string은 가변길이 배열이기 때문인데

가변길이 배열에 대한 설명은 추후 다른글에서 다룰 것이다

 

어쨋든 string도 배열이기 때문에

처음에 만들었던 char 배열과 동일하게 인덱스에 접근하여 문자 하나하나를 가져올 수 있다