C#에서 StringBuilder를 사용하는 이유는?
_____A1: System.Text 네임스페이스에 속하는 클래스이며, 내부적으로 가변(mutable) 버퍼(buffer)를 사용해 문자열을 효율적으로 추가·수정·삭제할 수 있도록 설계되었습니다.
Q2: 왜 StringBuilder를 사용해야 하나요?
A2: C 의 string은 불변(immutable)이기 때문에 연결(concatenation)할 때마다 새로운 인스턴스가 생성됩니다. 반면 StringBuilder는 내부 버퍼를 재사용하므로:
- 메모리 할당 횟수 감소
- 가비지 컬렉션 부담 완화
- 대량 문자열 처리 시 성능 대폭 향상
Q3: string과 StringBuilder의 차이점은 무엇인가요?
A3:
- string: 불변 클래스, “+” 연산 시마다 새 객체 생성
- StringBuilder: 가변 클래스, Append·Insert·Remove 등으로 버퍼를 직접 조작
- 용도: 짧은 문자열 조작은 string, 반복적·대량 조작은 StringBuilder 권장
Q4: 내부 동작 방식은 어떻게 되나요?
A4:
- 초기 용량(capacity)을 설정
- 용량 초과 시 내부적으로 버퍼 크기를 늘림
- Append · Replace 등 메서드를 호출할 때 재할당 없이 기존 버퍼에 쓰기
Q5: 메모리·성능 측면에서 구체적 이점은?
A5:
- 객체 생성 비용 절감: string 연쇄 연결 시 수십~수백개의 임시 객체 생성 방지
- 가비지 컬렉션 회피: 불필요한 힙 할당 감소
- 처리 속도 향상: 대량 문자열 연산 시 최대 수십 배 빠른 실행
A6: 기본적으로 스레드 세이프(thread-safe)가 아닙니다.
- 여러 스레드가 동시에 같은 인스턴스를 조작하면 동기화 필요
- 단일 스레드에서 사용하거나 lock으로 감싸서 사용 권장
Q7: 사용 예시를 간단히 보여주세요.
A7:
StringBuilder sb = new StringBuilder(128);
sb.Append("Hello");
sb.AppendFormat(", {0}!", "World");
string result = sb.ToString();
Q8: StringBuilder 사용 시 주의할 점은?
A8:
- 초기 용량을 적절히 설정해야 내부 재할당 횟수 최소화
- 쓰고 난 뒤 ToString() 호출 시점에 최종 문자열이 복사됨
- 짧은 문자열 조작에는 오히려 오버헤드가 발생할 수 있음
Q9: 언제 string 연결(+)이 더 나은가요?
A9:
- 연결 횟수가 적고, 코드 가독성을 중시할 때
- 컴파일러가 내부적으로 StringBuilder로 변환해 주는 간단한 표현식(“a” + “b” 수준)
Q10: 요약하면 언제 StringBuilder를 선택해야 하나요?
A10:
- 대량의 문자열을 반복적으로 추가·수정·삭제할 때
- 동적 콘텐츠를 조합해 최종 문자열을 생성하는 로직이 복잡할 때
- 성능·메모리 효율을 우선시할 때
작성자:
박지호 [비회원]
| 작성일자: 1년 전
2024-09-09 08:38:56
조회수: 209 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 209 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.