본문 바로가기

프로그래밍/C# 프로그래밍

C# String Object 의 불변성


String Object는 한번 할당이 되면 변하지 않는다.(불변성 존재)


그렇다면 이렇게 하면 어떻게 되는 것일까?


string s1 = "A string is more ";
string s2 = "than the sum of its chars.";

s1 += s2;


System.Console.WriteLine(s1); // 출력: A string is more than the sum of its chars.


분명 출력은 s1이 s2와 합쳐진 형태이다.

그렇다면, s1이 변한것이 아닌가? 라고 생각할 수도 있지만 그렇지 않다.


결과적으로 처음에 할당된 s1과 s2 개체는 변하지 않았다.

+= 연산이 진행됐을때 새 개체(s1)가 생성이 된 것이다.

s1과 s2의 합쳐진 형태의 새 string object가 생성이 되었다.

그렇다면 처음에 할당된 s1은 어디로 갔단 말인가?


원래 s1를 참조하는 개체가 더이상 없기 때문에 가비지컬렉터에 의해 해제가 된다.


따라서 string 개체의 수정은 사실상 '생성'이기 때문에 주의해야 한다.


string s1 = "Hello ";
string s2 = s1;
s1 += "World";

System.Console.WriteLine(s2);


s1은 처음 생성된뒤 수정되었기 때문에 World가 추가된 s1은 다른 개체이다.

s2는 처음 생성된 "Hello" String을 참조하고 있기 때문에 출력은

Hello 이다.