20240402_StringBuilder

2024. 4. 2. 15:41IT/TIL

오늘의 TIL은 C#에서 String을 다룰 때 사용되는 StringBuilder에 대한 내용이다.

 

StringBuilder(이하 SB)란

SB는 String(문자열)을 Build(건축)하는 것으로

문자열을 수정할 때 사용되는 클래스이다.

 

C#에서 String은 직접 수정할 수 없다.

String의 값을 수정하는 경우에 기존의 String에 해당하는 값은 삭제하고

새로운 값을 생성하여 String에 연결하므로(값 형식의 특징)

String의 값을 빈번하게 수정하는 경우에는 이로 인해 GC가 많이 발생하게 된다.

 

하지만 SB는 값을 수정하는 경우에 새로운 값을 생성하지 않고

SB 내부에서 값을 수정할 수 있게 만들어진 클래스이다.

따라서 SB를 사용하면 불필요한 중간 값을 생성하지 않으므로

GC가 발생하지 않고 메모리적인 측면에서 이점이 발생한다.

따라서 String의 값이 많이 변경되는 경우에는 SB를 사용하는 것이 좋다.

 

 

SB의 특징

SB의 주요 특징은 아래와 같다.

 

- 변경 가능성(Mutability)

SB는 변경 가능한 문자열로써, 새로운 문자열 인스턴스를 생성하지 않고도 문자열의

내용을 변경할 수 있다. 이는 문자열을 많이 조작하는 경우에 성능을 크게 향상시킬 수 있다.

 

- 성능 최적화

문자열의 추가, 삭제, 수정과 같은 조작이 빈번히 발생하는 경우, SB는 String에 비해 훨씬

더 효율적이다. String은 불변이므로, 내용을 변경할 때마다 새로운 String을 생성해야되지만,

SB는 내부 버퍼를 활용하여 이러한 비효율성을 줄인다.

 

- 동적 크기 조절

SB의 내부 버퍼 크기는 동적으로 조절된다. 문자열에 내용을 추가하면 필요에 따라 자동으로

버퍼 크기가 증가한다. 이는 메모리 사용량을 최적화하고, 크기 조절로 인한 수동 관리 필요성을 줄인다.

 

- 문자열 변환

최종적으로 ToString() 메소드를 사용하여 SB의 내용을 일반 String으로 변환할 수 있다.

이 변환은 마지막 단계에서 한 번만 발생하므로, 작업 중에는 성능 저하 없이 문자열을 조작할 수 있다.

 

 

SB 메소드

SB에서 주로 사용되는 메소드들은 아래와 같다.

 

- Append

SB의 끝에 문자, 문자열, 숫자 등 다양한 타입의 데이터를 추가한다.

예) sb.Append("hello") -> sb의 끝에 "hello" 추가한다.

 

- Insert

SB의 지정된 인덱스에 문자열이나 개체를 삽입한다.

예) sb.Insert(5, "Start") -> sb의 5번 인덱스에 "Start" 문자열을 삽입한다.

 

- Remove

SB에서 지정된 인덱스부터 지정된 수의 문자를 제거한다.

예) sb.Remove(0, 5) -> sb의 0번 인덱스(처음)부터 5개의 문자를 삭제한다.

 

- Replace

SB에서 지정된 문자 또는 문자열을 다른 문자 또는 문자열로 모두 교체한다.

예) sb.Replace("HI", "End") -> sb의 모든 "HI" 문자열을 "End"로 교체한다.

 

- Clear

SB의 모든 내용을 삭제한다.

 

 

위의 내용들을 실제로 사용하면 아래와 같다.

StringBuilder sb = new StringBuilder();

sb.Append("hello");
Console.WriteLine(sb); // hello

sb.Append("HI");
Console.WriteLine(sb); // helloHI

sb.Insert(5, "Start");
Console.WriteLine(sb); // helloStartHI

sb.Remove(0, 5);
Console.WriteLine(sb); // StartHI

sb.Replace("HI", "End");
Console.WriteLine(sb); // StartEnd

 

 

오늘은 C#에서 String의 수정이 빈번하게 일어나는 경우에 사용할 수 있는

StringBuilder에 대해서 조금 더 알아보는 시간을 가졌다.

String이 가지는 값 형식의 특징으로 인해 생기는 문제점을 보완하기 위해 사용되는

SB는 메모리를 관리하는 측면에서 String보다 이점이 많은 경우가 있기 때문에

String의 값이 변경되는 경우 SB와 비교하여 어떤 것을 사용할지 정하는

의사결정을 하면 좋을 것이라고 생각한다.

'IT > TIL' 카테고리의 다른 글

20240513_C#에서 숫자 표기 관련  (0) 2024.05.13
20240511_택시 기하학  (0) 2024.05.11
20240329_금과 은 운반하기(프로그래머스)  (1) 2024.03.30
20240328_A로 B 만들기(프로그래머스)  (0) 2024.03.28
20240328_DFS(타겟 넘버)  (0) 2024.03.28