String 클래스 - 불변객체

SungMin·2026년 5월 26일

자바 심화 정리

목록 보기
13/34

String은 불변객체다.

package lang.string.immutable;

public class StringImmutable1 {
    public static void main(String[] args) {
        String str = "hello";
        str.concat("java");
        System.out.println("str = " + str);
    }
}

String.concat()을 이용하면 기존 문자열에 새로운 문자열을 합칠 수 있다.
이럴 경우 어떤 실행 결과가 나올까?

 str = hello

전혀 합쳐지지 않았다. 이 이유에 관해 알아보자.


package lang.string.immutable;

public class StringImmutable2 {
    public static void main(String[] args) {
        String str1 = "hello";
        String str2 = str1.concat(" java");
        System.out.println("str1 = " + str1);
        System.out.println("str2 = " + str2);
    }
}

String은 불변객체이기 때문에 변경이 필요한 경우 기존값을 변경하지 않고, 새로운 결과를 만들어서 반환한다.


String이 불변객체로 설계된 이유

문자열 풀에 있는 String 인스턴스의 값이 변경되면 같은 문자열을 참고하는 다른 변수의 값도 함께 변경이 된다.

만약 String 내부의 값을 변경할 수 있다면, 기존에 문자열 풀에 있는 문자를 참조하는 변수의 모든 문자가 변경되는 문제가 발생할 수 있다.

profile
오늘도 한 걸음씩 나아가

0개의 댓글