본문 바로가기

프로그래밍언어/Java

[Java 중급] String 클래스 - 불변 객체

String  클래스 - 불변 객체


String 은 불변 객체이다. 따라서 생성 이후에 내부 문자열의 값을 변경할 수 없다. 

 

=> String 내부로 들어가보면 final로 선언된 것을 확인할 수 있다. 

 

public class StringImmutable1 {

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

 

실행결과

=> 문자열이 합쳐지지 않았다. 왜 일까?

concat의 결과를 변수에 할당해보자. 

 

public class StringImmutable1 {

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

 

실행결과

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

 

String이 불변으로 설계된 이유?


String은 성능 최적화를 위해 문자열 풀을 사용한다. 문자열 풀에 있는 String 인스턴스의 값이 변경되면 같은 문자열을 참고하는 다른 변수의 값도 함께 변경되는 사이드 이펙트 문제가 발생한다. 

 

 

 

* 인프런 '김영한의 실전 자바 - 중급 1편'을 참고하여 작성하였습니다.