1. String
우리는 일반적으로 문자열을 사용하기 위해 String을 사용한다.
String을 사용할 때 아래와 같이 대입, 변경 등을 사용해왔을 것이다.
string testString;
testString = "10";
testString = "10" + "20";
testString = String.Format("{0},{1}", 10, 20);
그러나 사실 위 방법은 내부적으로 굉장히 비효율적인 구조다.
String은 불변 객체에 해당한다.
즉, 한번 생성되면 값이 변경되지 않는다.
"위 코드대로라면 분명 값이 바뀌는데!?" 라고 생각하겠지만 내부적으로는 사실 그렇지 않다.
String 객체가 생성되면 Constant String Pool 이라는 것에 저장이 된다.
현재 객체에 새로운 문자열을 대입하면 그 문자열은 Pool에 새로운 String 객체로서 저장된다.
그리하여 현재 객체는 새로운 String 객체로 대체되지만 기존 객체(현재객체였던)는 Pool에는 남아있지만
더 이상의 참조는 없는 상태가 된다. (이런씩으로 쌓이다보면 메모리가...)
결론은
1. 불변 객체다.
2. 실행속도와 메모리 사용 문제가 생긴다.
2. StringBuilder
생각보다 사람들이 잘 안쓰더라.. 이 좋은걸..
String과 달리 가변 객체다
문자열이 변경되면 자동으로 필요한 메모리를 동적으로 변경하고 내용을 바꿀 수 있다.
자주 변경되는 경우에는 String 대신에 StringBuilder를 사용하는게 좋다.
StringBuilder객체는 힙 메모리에 적재된다.
결론은
1. 가변 객체다.
2. 웬만하면 변경이 자주 일어나는 문자열은 StringBuilder를 사용하자!!
정말 마지막으로..
자바의 경우 jdk1.5이상의 String은 컴파일 단계에서 StringBuilder로 변환된다고 하는데...
C#도 그런지 모르겠다..
'프로그래밍 > 기본기ㆍ자료구조' 카테고리의 다른 글
Dictionary와 HashTable의 차이 (0) | 2021.02.01 |
---|---|
C# GC의 이해 및 메모리 최적화 (4) | 2021.01.31 |
Boxing UnBoxing (박싱 언박싱) (2) | 2021.01.29 |
OSI 7계층 (0) | 2021.01.28 |
Goto (0) | 2020.09.25 |