Immutable의 사전 뜻은 "변경할 수 없는", "불변의"입니다.
Immutable type은 말그대로 인스턴스 생성 후 멤버 데이터를 변경할 수 없는 타입을 말합니다.
처음 Immutable type을 그닥 신경쓰지 않았습니다. 겪을일이 없었기 때문이죠.
그러나 부제에서와 같이 Shallow Copy를 할 이유가 있어 하다보니 문득 의문이 들었습니다. "왜 복사개체에서 문자열 변수 값을 변경하였는데 원본개체의 문자열 변수에는 변경사항이 없는가? 내가 알고 있는 지식으로는 문자열은 참조형식이기 때문에 Shallow Copy에서 복사개체의 문자열또한 원본개체가 바라보는 주소와 같을텐데.."라고 생각하였습니다.
그러나 테스트를 해보았고 기대와 다른 결과가 나오게 되었습니다.
아래는 테스트 소스입니다.(/unsafe를 통하여 컴파일 하셔야 합니다.)
|
문자열은 Immutable type이기 때문에 값을 수정할 때마다 새로운 개체를 만들게 된다고 합니다.
계속 수정하는 경우 기존의 참조되지 않는 개체의 수가 증가(가비지 데이터)되고 성능까지 미친다고 합니다. 그래서 자주 변경되는 문자열인경우는 StringBuilder를 사용하도록 추천을 해주었던 이유였습니다. 그래야 개체를 매번 만들지 않아 성능이 저하되는일이 없기때문입니다.
저는 StringBuilder를 사용해야 한다고는 알고 있었으나 Immutable에 대한 개념은 전혀 없었습니다. 그냥 아무런 이해없이 외우기만 하였다라는걸 이제서야 알게되습니다.
저와 같이 문자열은 참조형식이라는건 알지만 Immutable type에 대한 개념이 없거나 간과하시는 분은 참고하시기 바랍니다.
※ Immutable Type ↔ Mutable Type
※ 참고사이트
https://code.i-harness.com/ko/q/241758
http://guslabview.tistory.com/187
http://www.csharpstudy.com/CSharp/CSharp-string.aspx
'개발 > C#' 카테고리의 다른 글
VisualStudio와 NSIS를 이용한 설치파일 만들기 (0) | 2020.12.23 |
---|---|
파일 작성 시 원자성 유지방법 (0) | 2020.10.23 |
c#에서 오피스(워드, 엑셀등) 접근 방법 - COM object관련 (0) | 2016.02.26 |
접근 제한자(Access Modifier) (0) | 2015.03.04 |
string.IsNullOrEmpty 와 string.IsNullOrWhiteSpace 비교 (0) | 2014.11.19 |