[java] 문자열(String) 초기화부터 StringBuilder 최적화까지

CHOI HONGSEO·2026년 3월 31일

자바에서 문자열(String)은 정말 자주 사용하지만, 은근히 실수하기 쉬운 부분들이 많습니다. 오늘은 문자열 자르기부터 올바른 초기화 방법, 그리고 메모리를 효율적으로 사용하는 StringBuilder까지 정리해 보겠습니다.

1. 문자열 자르기의 기본: substring()

문자열의 특정 부분만 잘라내고 싶을 때는 substring()을 사용합니다.

my_string.substring(0, n)

위와 같이 작성하면 인덱스 0번째부터 n-1번째까지의 문자열을 출력해 줍니다. (시작 인덱스는 포함하고, 끝 인덱스는 포함하지 않는다는 점을 기억하세요!)


2. String 선언과 초기화: 빈 문자열("") vs null

문자열 변수를 선언할 때 String st;라고만 선언하면 변수에 아무런 값도 들어가지 않아 사용할 때 에러가 발생할 수 있습니다. 따라서 String st = ""; 처럼 빈 문자열로 초기화해 주는 것이 좋습니다.

주의! 초기화할 때 null의 함정
만약 String st = null;이라고 초기화한 뒤 st += 1;을 하면 어떻게 될까요?
결과는 "1"이 아니라 "null1"이 되어버립니다. null이라는 글자 뒤에 숫자가 그대로 붙어버리기 때문입니다. 반드시 쌍따옴표("")로 초기화하는 습관을 들입시다!

참고로 문자열에 숫자를 더할 때, st += String.valueOf(num); 처럼 명시적으로 바꿔줘도 되지만, st += num; 이라고만 써줘도 자바가 알아서 숫자를 문자로 바꿔서 더해줍니다.


3. 문자열 더하기 연산: String += vs StringBuilder

배열에 있는 홀수와 짝수를 각각 이어 붙이는 상황을 가정해 봅시다.

비효율적인 방식 (String += 사용)

위 코드처럼 odd += ... 형태로 문자열을 더해주는 방식은 매우 비효율적입니다. 자바에서 String은 값이 변하지 않는(불변) 객체이기 때문에, += 연산을 할 때마다 기존 메모리를 버리고 새로운 메모리 공간을 계속해서 생성하게 됩니다. 데이터가 많아질수록 성능이 크게 떨어집니다.

효율적인 방식 (StringBuilder 사용)

public static int solution(int[] num_list) {
    StringBuilder odd = new StringBuilder();
    StringBuilder even = new StringBuilder();
    
    for (int num : num_list) {
        if (num % 2 == 0) {
            even.append(num);
        } else {
            odd.append(num);
        }
    }
    return Integer.parseInt(odd.toString()) + Integer.parseInt(even.toString());
}

StringBuilder를 사용하면 기존 메모리 공간을 재활용하여 문자열을 이어 붙이기(append) 때문에 메모리 낭비 없이 훨씬 빠르고 효율적으로 작업할 수 있습니다. 반복문 안에서 문자열을 더할 일이 있다면 무조건 StringBuilder를 사용하는 것이 좋습니다!

profile
곧 성공할 개발자입니다.

0개의 댓글