# Java 코딩 테스트: StringBuilder 활용 사례 모음 --- ## 1. 왜 `StringBuilder`를 쓸까? 코딩 테스트에서 문자열을 다룰 때는 `String`보다 `StringBuilder`나 `StringBuffer`를 활용하는 것이 ****성능 면에서 매우 유리****하다. ### 1.1 `String`은 불변 (immutable) - `String str = "a"; str += "b";` 는 사실상 매번 ****새로운 객체를 생성****합니다. - 반복 연결 시 매우 비효율적 → `O(n^2)` 시간복잡도 발생 가능 ### 1.2 `StringBuilder`는 가변 (mutable) - 내부 `char[]` 버퍼를 직접 수정 - 반복적으로 append해도 ****객체 1개로 해결**** → 훨씬 빠름 📌 참고: `StringBuilder`는 `synchronized`가 ****아닌**** 대신 더 빠르다. 멀티스레드가 아니면 `StringBuffer`보다 성능상 유리하다. --- ## 2. 자주 나오는 활용 패턴 ### 2.1 문자열 뒤집기 (문제 유형: 팰린드롬 판단, 좌우 비교) ``` String str = "hello"; String reversed = new StringBuilder(str).reverse().toString(); System.out.println(reversed); // 출력: "olleh" ``` - 빠르게 문자열을 뒤집는 가장 간단한 방법 - 팰린드롬 문제에서 `str.equals(reversed)`로 비교 --- ### 2.2 대량 문자열 이어붙이기 (문제 유형: 문자열 압축, 변환 등) ``` StringBuilder sb = new StringBuilder(); for (char c : arr) { sb.append(Character.toUpperCase(c)).append(", "); } String result = sb.toString(); ``` - 루프 안에서 문자열을 누적할 때 `+` 대신 `append()` 사용 - `String`으로 누적하면 매번 새로운 객체가 생김 → 성능 저하 --- ### 2.3 조건에 따라 문자열 조립 (문제 유형: 포맷팅, 규칙 변환) ``` StringBuilder sb = new StringBuilder(); for (int i = 1; i <= 5; i++) { sb.append("[").append(i).append("]"); if (i < 5) sb.append("-"); } System.out.println(sb.toString()); // 출력: [1]-[2]-[3]-[4]-[5] ``` - 특정 규칙을 가진 문자열을 만들어야 할 때 - 공백, 구분자, 특수문자 등을 유동적으로 넣기 좋음 --- ### 2.4 문자열 일부 제거 (문제 유형: 특정 문자 제거, 구간 삭제) ``` StringBuilder sb = new StringBuilder("abcdef"); sb.delete(2, 4); // 인덱스 2~3 삭제 → "abef" System.out.println(sb); ``` - 특정 구간 제거, 문자 삭제 등 깔끔하게 가능 - 문자열 슬라이싱처럼 사용할 수 있음 --- ## 3. 코딩 테스트 팁
상황 | 추천 도구 | 이유 |
---|---|---|
문자열을 자주 수정/누적할 때 | `StringBuilder` | 가변 객체, 빠른 속도 |
문자열을 뒤집을 때 | `StringBuilder.reverse()` | 메서드 하나로 간단 처리 |
멀티스레드 고려 필요 없음 | `StringBuilder` | 동기화 없음 → 더 빠름 |