본문 바로가기

C#/문자열

C# string의 기본적인 특징

string은 메모리상 heap에 저장되는 참조(reference) 타입이다.

 

참조 타입인 string은 다른 참조타입과 다르게 조금 특이한 특성이 있다.

 

먼저 일반적인 참조타입의 '대입'과 '비교' 시 특징을 알아보자.

1. 참조타입의 대입
참조타입은 대입시 값이 복사되는 것이 아니라 데이터를 참조하는 참조자가 하나 더 늘어날 뿐 별도의 메모리가 추가 할당되는 것은 아니다.

2. 참조타입의 비교
참조타입을 비교할 시 heap의 번지를 비교하기 때문에 내용이 완전히 같아도 위치가 다르면 같지 않은 것으로 판단한다.

 

이런 일반적인 참조타입과 다르게 string의 '대입'과 '비교'는 특이하게 동작한다.

1. string의 대입
string은 읽기 전용이다. 따라서 대입 시 내용이 바뀌는 것이 아니라 아예 새로운 문자열이 생성된다.

2. string의 비교
string끼리 비교 시에 heap의 번지를 비교하지 않고 문자열 자체를 비교하도록 == 연산자에 오버로딩되어 있다.
그래서 heap의 번지가 다르더라도 내용이 완전히 같으면 같다고 판단한다.