-
C# 문자열 합치기, 아직도 + 연산자만 쓰시나요? (String vs StringBuilder)개발/C# 2026. 1. 13. 10:32반응형
C# 개발자라면 매일 마주치는 문자열(String) 처리 이야기를 해보려고 합니다. 보통 "문자열 합칠 땐 StringBuilder를 써라"는 말을 많이 듣지만, 사실 무조건은 아닙니다.
상황에 따라 무엇을 쓰는 게 최선인지, 제가 실무에서 느낀 점들을 섞어서 깔끔하게 정리해 드릴게용..
1. 왜 String은 합칠수록 느려질까요?
C#에서 string은 '불변(Immutable)' 객체입니다. 한 번 메모리에 올라가면 내용을 바꿀 수 없다는 뜻이죠.
우리가 str += "추가"라고 쓰는 순간, 기존 문자열에 글자가 붙는 게 아니라 새로운 메모리 공간을 할당받아 "기존 내용 + 추가 내용"을 새로 씁니다.
이걸 반복문 안에서 수만 번 하면 어떻게 될까요? 컴퓨터는 계속 새 종이를 꺼내서 다시 쓰고, 이전 종이는 쓰레기통에 버리는 작업을 반복합니다. 당연히 **메모리 낭비와 성능 저하(GC 부하)**로 이어지죠
2. 그래서 등장한 구원투수, 'StringBuilder'
반면 StringBuilder는 '가변(Mutable)' 객체입니다. 쉽게 말해 화이트보드 같아요.
새 종이를 꺼낼 필요 없이, 하나의 버퍼(공간) 안에서 글자를 덧붙이고 수정합니다. 메모리를 미리 넉넉하게 잡아두고 그 안에서 다 해결하니까 대량의 문자열을 합칠 때 압도적으로 빠릅니다.
3. 실제 코드로 보는 성능 차이
[위험한 코드: 반복문 내 + 연산]
string result = ""; for (int i = 0; i < 10000; i++) { result += i.ToString(); // 매번 새로운 객체 생성 (느림) }[권장 코드: 대량 작업 시 StringBuilder]
using System.Text; StringBuilder sb = new StringBuilder(); for (int i = 0; i < 10000; i++) { sb.Append(i.ToString()); // 동일 객체 내에서 작업 (빠름) } string finalResult = sb.ToString();4. 잠깐! "무조건 StringBuilder"가 정답은 아닙니다
여기서 중요한 포인트가 있습니다. 상황에 따라서는 그냥 +나 **문자열 보간($"")**을 쓰는 게 더 나을 때도 많거든요.
- 합칠 문자열이 몇 개 안 될 때 (2~4개): StringBuilder 객체를 생성하는 비용(오버헤드)이 더 클 수 있습니다. 이때는 그냥 +나 $"{name}님" 형식이 훨씬 가독성도 좋고 속도도 충분합니다.
- 컴파일 타임에 결정되는 문자열: "A" + "B" + "C" 같은 코드는 컴파일러가 알아서 "ABC"로 합쳐주기 때문에 우리가 신경 쓸 필요가 없습니다.
- 가독성이 최우선일 때: 코드는 나만 보는 게 아니죠. 성능 차이가 미미한 곳에서는 가독성이 좋은 방식을 선택하는 게 실력입니다.
가독성이 중요할 때
// 이게 훨씬 보기 편하죠? string profile = name + "님, 안녕하세요! 점수는 " + score + "점입니다."; // 가독성이 떨어질 수 있습니다. StringBuilder sb = new StringBuilder(); sb.Append(name); sb.Append("님, 안녕하세요! 점수는 "); sb.Append(score); sb.Append("점입니다.");결국 **"상황에 맞는 도구를 골라 쓰는 것"**이 진짜 실력입니다. 무조건 한 방식만 고집하기보다, 데이터의 양과 가독성을 고려해서 현명하게 선택해 보세요!
오늘 포스팅이 도움 되셨다면 공감과 댓글 부탁드립니다. 궁금한 점은 언제든 남겨주세요!
반응형'개발 > C#' 카테고리의 다른 글
[C#] WinForms "크로스 스레드 작업이 잘못되었습니다" (0) 2026.01.15 C# 비동기 프로그래밍(async/await) (1) 2026.01.14 C# 초보자가 가장 많이 하는 실수: List 사용법 (0) 2026.01.12 C# NullReferenceException 해결법: "객체 참조가 개체의 인스턴스로 설정되지 않았습니다" (0) 2026.01.09 C# Windows Form [2] UI 속성 사용법 (2) 2024.01.10