immutable: 불변의
mutable: 변할수 있는
String text = "kimchi";
System.out.println("text = " + text);
text = "delicious";
System.out.println("text = " + text);
//result
// text = kimchi
// text = delicious
위 코드에서 text = "delicious"
에 의해 text는 새로운 객체를 할당받아 값이 바뀐것이다.
반면 아래와 같이 String이 아닌 StringBuilder를 통해 객체를 만든다고 가정해보자.
StringBuilder text = new StringBuilder();
text.append("Hello");
text.append("World");
System.out.println("text = " + text);
//result
// text = HelloWorld
Immutable | Mutable |
---|---|
생성된 이후 수정이 불가능하며 값변경시 새로운 객체를 할당받는다. | 생성된 이후 수정이 가능하며 이미 존재하는 객체에 재할당(값을 변경)한다. |
값을 변경할수 있는 메소드를 제공한다(위에서 .append) | 값을 변경할수 있는 메소드를 제공하지 않는다. |
Wrapper Class, String Class.. | StringBuffer,StringBuilder.. |
병렬 프로세스나 쓰레드에 안전하다. | 병렬 프로세스나 쓰레드 사용시 값을 보장하지 못한다. |