TIL

[TIL] 코딩테스트를 풀다가 StringBuilder의 필요성을 직접 체감하다.

기억지기 개발자 2026. 5. 27. 20:20

오늘 코딩테스트 문제를 풀다가 문자열을 뒤집는 문제를 만났다.

바로 아래의 코드는 내가 작성한 방식이다.

class Solution {

    public String solution(String my_string) {

        String answer = "";

        for (int i = my_string.length() - 1; i >= 0; i--) {
            answer += my_string.charAt(i);
        }

        return answer;
    }
}

물론 이 방식도 동작은 한다.
하지만 다른 사람들의 풀이를 보니 대부분 StringBuilder의 reverse() 메서드를 사용하고 있었다.

class Solution {

    public String solution(String my_string) {

        return new StringBuilder(my_string)
                .reverse()
                .toString();
    }
}

 

StringBuilder의 존재는 알고 있었지만 평상시에 필요성을 크게 체감하지는 못했었다. 

하지만 다른 사람들의 풀이를 보고 StringBuilder의 강력함과 효율성에 대해서 알게 되었다. 


String은 불변(immutable) 객체

Java의 String은 한 번 생성되면 내부 값을 변경할 수 없다.

즉 아래 코드처럼 보이더라도:

answer += "a";

실제로는:

  1. 기존 문자열 유지
  2. 새로운 문자열 생성
  3. 새로운 문자열 반환

과정을 반복한다.

문자열을 계속 수정하는 상황에서는 비효율적일 수 있다.


StringBuilder는 문자열을 수정 가능한 객체

StringBuilder는 문자열을 계속 변경할 수 있도록 만들어진 클래스다.

대표적으로:

  • append()
  • insert()
  • delete()
  • reverse()

같은 메서드를 제공한다.

예:

StringBuilder sb = new StringBuilder("hello");

sb.reverse();

System.out.println(sb);

출력:

olleh

왜 코딩테스트에서 많이 사용할까?

코딩테스트에서는:

  • 문자열 뒤집기
  • 문자열 이어 붙이기
  • 문자 수정

같은 작업이 자주 나온다.

이때 String을 반복해서 수정하면 성능이 비효율적일 수 있기 때문에, 대부분 StringBuilder를 많이 사용한다.

특히:

answer += 문자

를 반복하는 방식은 문자열이 계속 새로 생성되기 때문에 성능상 좋지 않다.


오늘 느낀 점

오늘 공부하면서 느낀 건, 코딩테스트는 단순히 문법만 아는 것으로 해결되지 않는다는 점이었다.

다른 사람의 풀이를 보면:

  • StringBuilder
  • HashMap
  • Arrays.sort()

같은 Java의 다양한 도구들을 자연스럽게 활용하고 있었다.

처음에는 “이걸 어떻게 다 알지?”라는 생각이 들었지만, 결국 중요한 건 문제 상황과 자주 쓰이는 패턴을 연결해서 익히는 것이라는 것을 알게 되었다. 더욱더 많은 양의 코드를 접하고 공부만이 살 길이라는 깨달음을 얻게 되었다.