C#에서 String(문자열)의 특징
C#에서 String은 불변(immutable)입니다. 이는 한 번 생성된 문자열 객체는 이후에 수정할 수 없다는 의미입니다. 문자열에 어떤 연산(연결, 변경 등)을 수행하면 기존 객체가 변경되는 것이 아니라, 메모리에 새로운 string 객체가 생성됩니다.
string str1 = "Welcome!"; // 연산 시 새로운 string 인스턴스가 생성됨 str1 += "Hello"; str1 += "World";
위 예제에서 += 연산이 실행될 때마다 기존 문자열을 버리고 새로운 문자열 객체가 만들어집니다. 따라서 반복문 안에서 문자열을 자주 연결하는 경우, 불필요한 객체가 계속 생성되어 성능 저하와 메모리 낭비로 이어질 수 있습니다.
C#에서 StringBuilder의 특징
StringBuilder는 가변(mutable)입니다. 즉, 문자열에 연산을 수행해도 매번 새로운 인스턴스를 생성하지 않고, 내부 버퍼에서 직접 내용을 수정합니다. 그 결과 String과 달리 연산할 때마다 새로운 메모리 공간을 할당하지 않으므로, 문자열을 반복적으로 조작할 때 훨씬 효율적입니다.
StringBuilder str1 = new StringBuilder("");
str1.Append("Welcome!");
str1.Append("Hello World!");
string str2 = str1.ToString();언제 무엇을 사용해야 할까?
일반적으로 다음과 같은 기준으로 선택하면 좋습니다:
- String: 문자열 값이 거의 변경되지 않거나 간단한 연결 몇 번으로 끝나는 경우에 적합합니다. 코드가 간결하고 가독성이 좋습니다.
- StringBuilder: 반복문 내에서의 문자열 누적, 대량의 문자열 결합, 실시간 로그 생성처럼 동일한 문자열을 여러 번 수정해야 하는 경우에 적합합니다. 불필요한 객체 생성을 줄여 성능을 크게 향상시킵니다.
정리하면, String은 불변이라 안전하지만 잦은 수정 시 오버헤드가 있고, StringBuilder는 가변 구조로 반복적인 문자열 작업에서 메모리와 성능 면에서 유리합니다. 상황에 맞게 두 클래스를 선택하는 것이 중요합니다.