[Java] - Mutable과 Immutable 차이

링딩·2023년 4월 16일
0

Computer Science

목록 보기
35/49




1. Mutable과 Immutable

MutableImmutable
생성된 이후 수정 가능생성된 이후 수정 불가능
이미 존재하는 객체에 재할당(값 변경)이미 존재하는 객체이더라도 새로운 객체를 생성하여 재할당
값을 변경할 수 있는 메소드 제공값을 변경할 수 있는 메소드 제공 x
Mutable class일 경우 Getter와 Setter 존재Immutable class일 경우 Getter와 Setter 미존재
thread safe하지 않을 수 있음(병렬처리 시 값 보장할 수 없게 됨)thread safe(병렬처리 시 문제 없음)
StringBuffer, StringBuilder, java.util.Date 등이 해당Legacy classes, Wrapper classes, String class 등이 해당
  • Mutable은 객체의 수정을 허용하나, Immutable인 경우 객체의 수정을 허용하지 ❌
  • 수정이 필요할 경우 Mutable 객체기존의 객체에 수정사항을 곧바로 반영한다.
  • 그에 비해 Immutable 객체의 경우 기존의 객체는 그대로 냅두고 수정사항을 반영한 새로운 객체를 생성한다는 점에서 차이가 있다.
    -> Immutable의 대표적 예시로는 String class가 존재한다.



2. Mutable 속성과 Immutable 속성

◾ Mutable(가변객체) 속성

  • heap 영역에 생성된 객체를 변경할 수 있다.
  • 예시: List, ArrayList, HashMap , StringBuilder ,StringBuffer ,StringBuilder, java.util.Date
  • 멀티 스레드 환경에서 사용하려면 별도의 동기화 처리가 필요
    -> 대표적 예시 StringBuffer

  1. stringBuffer에 할당되었고
  2. stringBuilder의 값을 abc에서 abcdef로 변경하였을 때 메모리 주소 값이 변경되지 않았다.
    => 이는 곧 1785210046의 메모리 주소에 할당된 abc란 값이 abcdef로 변했단 것을 알 수 있다.
    또한 기존의 객체에 수정사항을 곧바로 반영하였기에 StringBuffer class는 Mutable하게 동작한다.




◾ Immutable(불변 객체) 특징 및 속성

  • 변경 불가능,바뀌지 않는 객체
  • 예시) String, Boolean, Integer, Float, Long 등 등

좀 더 자세히 들어가면 이 '불변 객체'를 생성하면 heap 영역에 객체가 생길 것이며 이 주소값을 가지는 변수가 stack에 생긴다.
곧, 불변 객체란 이 객체에 대한 값을 heap 영역에서는 수정할 수가 없다는 것이다.

그저 heap에 새로운 값을 가진 객체를 만들어 stack의 해당 참조변수의 레퍼런스 값을 변경해주는 것이다.

  • 여기서도 같은 str 변수에 할당되었지만 str의 값을 abc에서 abcdef로 변경하였을 때, 메모리 주소 값도 같이 변경되었다.
  • 이는 곧 1785210046의 메모리 주소에 할당된 abc란 값이 abcdef로 변한 것이 아니라 1151020327의 메모리 주소에 abcdef란 값을 가진 String 객체가 새로 생성된 것임을 나타낸다.
    => 따라서 String class는 Immutable하게 동작한다.
    => 무슨말이냐? 값이 변경되었기에 heap에서 새로운 값을 가진 객체를 생성하였고 이에 따라 실제 가리키는 레퍼런스 값도 수정되었다.

Immutable(불변 객체)의 장단점😥

장점

  • 객체에 대한 신뢰도가 올라간다.
  • 멀티 스레드 환경에서 동기화 처리 없이 객체를 공유 가능하다.(쓰레드에 안전하다 라고함)

단점

  • 객체의 값이 할당될 때 마다 새로운 객체가 필요하다.
    -> 이로인해 메모리 누수와 성능저하를 발생시킬 수 있다.



출처

guswlsapdlf님의 글을 참조하여 작성하였습니다.

cantcoding님의 글을 참조하여 작성하였습니다.

profile
초짜 백엔드 개린이

0개의 댓글