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