우리는 보통 Getter를 아무 의미 없이 Spring 어노테이션이든 메서드로 만들어 사용하곤 한다.
그러나 우리는 의미 있는 개발을 위해 적재적소에 사용하는 법을 알아야 한다.
객체의 상태는 외부에 노출시키면 않된다. - 객체지향의 사실과 오해
객체 지향의 사실과 오해라는 책에 내용과 같이 객체의 상태는 캡슐화가 되어 외부에 노출시키면 안된다. 또한 객체는 각자의 책임을 다해야된다.
또 객체는 다른객체와 메시지를 주고 받는다. 객체는 메시지를 받으면 그에따른 행동을 수행한다, 필요하다면 객체 스스로 내부의 상태도 변경한다.
그러나 모든 맴버변수에 Getter 을 넣다보면 책임이 다른 곳에서 수행되고 외부에서 상태변경해야될 상황이 발생할수도 있다.
또 다른이유로는 getter는 메시지 체인을 이 되어버린다.
book.gettitle().getbookname().getwriter().getprice()
메시지 체인 - 계속해서 메서드 호출이 이어지는 코드
위와같이 메시지 체인이 게속되면 가독성이 떨어진다.
Getter를 사용하면 OOP 의 4대원칙을 준수하기위해 접근 제어자를 숨기고 하는 일들이 무용지물이된다.
위와같은 캡슐화를 무시하는 getter 를 지양하는게 좋다.
사용하지 않을 대안
메서드 추가: 객체의 상태를 직접 노출하는 대신, 객체 내부의 상태를 변경하거나 조회할 수 있는 메서드를 하는 방법이 있다..
Immutable 객체 사용: 객체의 상태를 변경할 수 없도록 만들어 캡슐화를 보장할 수 있다..