mutable, immutable

yookyungmin·2023년 4월 19일
0

Mutable (가변객체)

  • 이미 존재하는 객체에 재할당
  • 객체의 수정을 허용
  • Getter, Setter 존재
  • 값을 변경할수 있는 메소드 제공
  • mutable객체는 불변객체와 다르게 heap영역에 생성된 객체를 변경 할 수 있다.
    대표적인 가변 객체는 List, ArrayList, HashMap,StringBuilder,StringBuffer 등이 있다.
    가변객체를 multi-thread 환경에서 사용하려면 별도의 동기화 처리를 해줘야한다.
    이렇게 동기화 처리된 객체중 하나가 StringBuffer이다.

Immutable (불변객체)

  • 이미 존재하는 객체이더라도 새로운 객체를 생성하여 재할당.
  • 객체의 수정을 허용하지 않는다.
  • Getter, Setter 미존재
  • 값을 변경할 수 있는 메소드 제공 X
  • String, Boolean, Integer, Float, Long 래퍼 클래스
  • 멤버 변수를 final 설정, class를 상속하지 못하도록 선언(final로 선언하거나 생성자를 private 선언)
  • Thread Safe 하다 (멀티 스레드 프로그래밍에서 여러 스레드로부터 동시 접근이 이루어져도 실행에 문제가 없다는 걸 말합니다)
  • new 연산자로 객체를 생성하면 heap영역에 객체가 생기고 래퍼런스 값을 가지는 변수가 stack에 생길 것이다. 불변 객체라는 것은 이 객체의 값을 heap 영역에서 바꿀 수 없다는 뜻이다.

참고문헌
https://cantcoding.tistory.com/41
https://velog.io/@guswlsapdlf/Java%EC%9D%98-Mutable%EA%B3%BC-Immutable

0개의 댓글