[JAVA]Immutable, Mutable

chanyoun·2023년 1월 30일
0

사전적 의미

immutable: 불변의
mutable: 변할수 있는


Immutable, Mutable

  • Immutable이란 객체의 수정을 허용하지 않는다.
    이미 존재하는 객체이더라도 새로운 객체를 생성하여 재할당 한다.
  • Mutable이란 객체가 생성된 이후 수정이 가능하며, 이미 존재하는 객체에 재할당(값 변경)한다.
  • Immutable의 예로 String class가 존재한다.
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
  • 이때는 append를 통해 text에 새로운 문자열을 추가한다. -> 문자열을 추가할때마다 객체가 재할당 되는 형태가 아니다.

Immutable, Mutable 특징

  • Mutable과 Immutable을 정리해보자면 다음과 같다.
ImmutableMutable
생성된 이후 수정이 불가능하며 값변경시 새로운 객체를 할당받는다.생성된 이후 수정이 가능하며 이미 존재하는 객체에 재할당(값을 변경)한다.
값을 변경할수 있는 메소드를 제공한다(위에서 .append)값을 변경할수 있는 메소드를 제공하지 않는다.
Wrapper Class, String Class..StringBuffer,StringBuilder..
병렬 프로세스나 쓰레드에 안전하다.병렬 프로세스나 쓰레드 사용시 값을 보장하지 못한다.

Reference

profile
기록은 힘들어

0개의 댓글