본문 바로가기
유니티/개념 정리

StringBuilder

by fore4022 2024. 12. 10.

우선 StringBuilder를 알아보기 전에 String에 대해서 확인해 보겠다.


String

공식 문서에서는 ‘문자열은 불변성’을 가진다고 나와있다.

‘불변성’, 바뀌지 않는다는 것이다.

string example = "abcde";

example = "edcba";

위에 작성된 코드를 보았을 때, 무언가 이상할 것이다.

"example이 'abcde'에서 'edcba'로 바뀌었는데, 불변이 아니지 않나요?"

위의 example은 하나의 변수로 문자열 객체를 가리키는 것이지, 문자열 그 자체가 아니다. 그렇기 때문에 example은 가리키는 문자열 객체가 바뀐 것 뿐이다. 그렇다면 어느 부분에서 문자열이 불변하는 것일까?

우선, 위의 내용을 통해서 String과 다른 자료형과의 차이가 나타난다.

"객체의 값을 바꾸는 것이 아닌, 새로운 객체를 참조한다."

이제, 이 부분에 있어서 문자열의 불변성을 볼 수 있다.

문자열 객체는 생성된 이후, 값이 바뀌지 않는다. 위의 예시에서 example에 다른 문자열을 넣는 것은 새로운 문자열을 생성해서 example이 해당 문자열을 참조하게 하는 것이다.

"문자열 객체 안에 있는 문자열이 바뀌는 것이 아니다. 새로운 문자열 객체를 생성해 참조하게 해주는 것이다."

결론적으로, 기존에 존재하는 문자열을 변경하게 되는 경우에 아예 새로운 문자열 객체를 생성하게 되면서 성능에 좋지 않다. 또한, 이전의 문자열 객체는 사용하지 않는 메모리로 Garbage가 된다.

"문자열 객체의 값은 불변한다."

String + String

위의 내용을 통해서 알 수 있는 내용이 하나 더 있다.

String a = "Hello";
String b = "World!";

String example = a + b;

위의 example은 문자열 a와 b 두개의 참조를 가지고 있는 것이 아닌, a와 b를 합하여서 만든 새로운 문자열 객체의 참조를 가지게 된다.


StringBuilder

본론으로 돌아와서, StringBuilder는 위와 같은 String의 단점을 보완한 것으로, 문자열 수정에 있어서 발생하는 Garbage를 절약할 수 있고, 속도 또한 빠르다.

장점

  • 문자열의 저장공간 크기를 지정할 수 있다.
  • 문자열의 저장공간이 부족해질 경우, 기존 저장공간 크기를 두배로 늘린다,
  • 문자열의 수정을 함수들을 사용해서 편하게 할 수 있다.
    • 특정 문자 삭제, 수정, 추가 등

단점

  • 문자열 저장공간의 크기를 줄일 수 없다.
  • String과 StringBuilder는 엄연히 다른 자료형으로, String으로 사용하기 위해서는 형식 변환이 필요하다. 또한, 이 과정에서 성능이 소요된다.

StringBuilder는 문자열을 어떻게 합하나요?

StringBuilder example = new StringBuilder("hello");

example.Append(" World!");

StringBuilder의 문자열은 불변이 아니다. 기존에 문자열 객체의 크기를 키워서, 그 공간에 합할 문자열을 저장하는 방식이다.


StringBuilder는 무조건 String보다 좋은 것이 아니다. 상황에 따라서 적절한 것을 사용하면 된다. String에 대해서도 알아가는 시간이었으면 좋겠다.

'유니티 > 개념 정리' 카테고리의 다른 글

const와 readonly  (0) 2025.04.01
Text와 TextMeshPro  (0) 2024.12.17
Null Return  (0) 2024.12.03
Call Back  (0) 2024.12.02
초기화가 호출되었는가?  (0) 2024.11.28