mutable vs immutable

JAVA 2015. 11. 27. 00:33

StringBuffer, StringBuilder vs String

스트링버퍼와 스트링빌더와 스트링 객체와의 가장 큰 차이는 

mutable 인지, immutable인지입니다. 


다음과 같은 코드의 결과값은 어떻게 될까요?

public class Test{
    
    public static void changeMutable(StringBuilder target){
        target.append('d');
    }
    
    public static void changeImmutable(String target){
        target += "d";
    }
    
    public static void main(String[] args) {
        StringBuilder test1 = new StringBuilder("abc");
        String test2 = "abc";
        
        System.out.println(test1);
        System.out.println(test2);
        
        changeMutable(test1);
        changeImmutable(test2);
        
        System.out.println(test1);
        System.out.println(test2);
    }
}
cs

<출력화면>

abc

abc

abcd

abc


와 같이 출력됩니다. 

우선 String클래스는 append와 같이 객체를 변화시킬 메서드를 제공하지 않습니다. 

반면에 StringBuildler와 StringBuffer는 append와 같은 set메서드를 제공합니다. 



그렇다면 immutable, 즉 변할 수 없는 불변의 객체를 제공하는 이유는 무엇이며 어떻한 경우에 필요한 걸까요?

멀티 스레드 환경에서 객체가 변화되는 상황에서는 immutable한 데이터를 통해 정보가 보여져야 합니다. 

그렇지 않은 경우 의도치 않은 데이터가 발생하게 됩니다. 

자바의 문제였던 시간 API가 자바 8에서 개선된 점에도 Date객체를 immutable한 속성으로 fix시켜 놓은 것과 

마찬가지 이유입니다. 




'JAVA' 카테고리의 다른 글

자바 스레드 프로그래밍  (0) 2015.11.23
자바 예외 처리  (0) 2015.11.21
GC(Garbage Collection)의 대상은 누구인가?  (0) 2015.11.10
LinkedHashMap, TreeMap, HashMap  (0) 2015.11.07
Comparable 인터페이스에 대한 이해  (0) 2015.11.07
Posted by slender ankles
,