본문 바로가기
C#

C# 문자열 조합 String, StringBuilder 사용법(차이점)

by 코딩이라구 2022. 12. 1.

코드를 작성하시다 보면 문자열 조합을 사용하는 경우가 종종 있는데, 이렇게 문자열 조합 or 결합 작업에서 유의해서 사용하면 더 효율적인 코드를 만드실 수 있습니다. 이번에는 String과 StringBuilder 사용법 및 차이점에 대하여 알아보도록 하겠습니다.


C# String, StringBuilder

1. String

String은 참조변수로 문자열을 조합할 때마다 새로운 클래스가 생성되며 이전의 객체들은 GC(Garbage Colletor)에 의해 수집됩니다. 그래서 문자열 조합이 많아질수록 부하가 많이 발생할 수 있습니다. 기본적으로 GC가 이런 객체들을 수집하여 비워주는 역할을 하지만, 그 시기가 언제인지 불분명하여 불필요한 메모리 낭비가 발생하여 메모리 누수가 발생하실 수 있습니다.

 

string str = "2022년" + "12월" + "01일";

위의 예제는 하나의 객체로 이루어진 것처럼 보이지만 실질적으로는 3개의 객체가 조합되어 만들어졌으며, 이 중 2개의 객체는 GC로 수집됩니다.

이런 반복적인 작업들이 많은 경우에는 메모리가 낭비되어 비효율적인 작업을 발생시킵니다.

 

2. StringBuilder

StringBuilder를 사용 시 문자열을 조합할 때마다 새로운 개체를 사용하지 않고, StringBuiler 클래스 내부 함수를 실행하여 하나의 객체에서 값들을 조합하거나 삭제하여 메모리 낭비를 줄일 수 있는 방안이 될 수 있습니다. 하지만 간단하고 반복적이지 않은 조합은 String보다 성능을 저하시킬 수 있으며, 동적으로 생성되는 만큼 사용자가 직접 메모리를 비워주는 작업을 해야 하는 불편함이 생길 수 있습니다.

 

StringBuilder sb = new StringBuilder();
sb.Append("2022년");
sb.Append("12월");
sb.Append("01일");
sb = null;

위의 예제는 하나의 StringBuilder 객체를 생성하여 해당 클래스의 Append 메서드를 이용하여 결합하는 과정을 보여주는 코드입니다. 메모리 낭비를 최소화하는데 좋지만, 사용자가 직접 메모리를 관리하며 사용하셔야 합니다.

(동적으로 생성한 sb 객체를 null 시켜줌으로써 더 이상 사용하지 않을 때 메모리 해제의 대상이 됩니다.)

 

3. 활용하기 좋은 코딩 방법

1) String 클래스

  • 문자열 수정이 적고, 반복적인 작업이 아닌 경우 (성능 향상)
  • 문자열의 광범위한 검색 작업을 수행할 경우 (StringBuilder보다 검색 작업을 하는 많은 함수를 가지고 있습니다.)

 

2) StringBuilder 클래스

  • 문자열 수정이 빈번하고, 반복적인 작업일 경우 (메모리 낭비 최소화)
  • 많은 수의 문자열 조합 또는 결합이 필요한 경우 (메모리 낭비 최소화)

댓글