Java 객체를 불변하게 만드는 방법
포스트
취소

Java 객체를 불변하게 만드는 방법

Java 객체를 불변하게 만드는 방법

이펙티브 자바를 보며 확인 했던 내용을 정리 합니다.

1. 객체의 상태를 변경하는 메서드(변경자)를 제공하지 않는다.

2. 클래스를 확장할 수 없도록 한다.

하위 클래스에서 부주의하게 혹은 나쁜 의도로 객체의 상태를 변하게 맏느느 사태를 막아준다. 상속을 막는 대표적인 방법은 클래스를 final로 선언하는 것

3. 모든 필드를 final로 선언한다.

시스템이 강제하는 수단을 이용해 설계자의 의도를 명확히 드러내는는 방법이다. 동기화 없이 다른 스레드로 건네도 문제없이 동작하게끔 보장하는 데도 필요하다

4. 모든 필드를 private으로 선언한다.

필드가 참조하는 가변 객체를 클라이언트에서 직접 접근해 수정하는 일을 막아준다.

5.자신 외에는 내부의 가변 컴포넌트에 접근할 수 없도록 한다.

클래스에 가변 객체를 참조하는 필드가 하나라도 있다면 클라이언트에서 그 객체의 참조를 얻을 수 없도록 해야한다.

불변 객체의 장점

1. 불변 객체는 근본적으로 스레드 안전하여 따로 동기화할 필요 없다.

여러 스레드가 동시에 사용해도 절대 훼손되지 않는다. 불변 객체는 안심하고 공유할 수 있다.

불변 객체의 단점

1. 값이 다르면 반드시 독립된 객체로 만들어야 한다.

결론

  • Getter가 있다고 해서 무조건 Setter 를 만들어서는 안된다.
  • 클래스는 꼭 필요한 경우가 아니라면 불변이어야 하낟.
  • 불변클래스는 장점이 많으며, 단점이라곤 특정 상황에서의 잠재적 성능 저하뿐이다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.