📌 객체의 상태가 변경되는 것은 객체 스스로의 행동에 의해서야 한다.
이렇게 설계될 때 객체는 자율적인 객체가 되고 외부의 영향을 받지 않음으로써 느슨한 결합과 유연한 협력을 이룰 수 있다.
getter, setter는 자신의 상태정보를 외부에 노출하고 이것은 외부의 영향으로 상태정보가 변할 수 있는 가능성을 열어두게된다. 한 객체의 변화가 여러 객체에게 영향을 주는 이러한 코드가 많아질수록 훗날 유지보수가 어려워질 것이다.
getter는 단순히 값을 뱉어내는 역할을 할 뿐 객체의 상태값을 변경할 수 있는 것도 아닌데 굳이 왜 그렇게 하는것일까?
getter를 남발하는 습관을 막을 수 있다.
객체는 독립적이어야하는데 getter를 통한 로직처리를 하는 메소드가 많아질수록 getter에 대한 의존성은 매우 높아질 것이다.
getter메소드만으로 외부에서 객체의 상태를 변경하지는 못하지만 그 결과값이 객체의 상태를 변경시키는데에 사용될 수 있다.
getter를 통해 얻은 상태값으로 하려고 했던 행동을 그 상태값을 가진 객체가 하도록 행동의 주체를 옮긴다.
위에도 언급했듯이, 객체는 독립적이어야하는데 setter를 통한 로직처리를 하는 메소드가 많아질수록 setter에 대한 의존성은 매우 높아질 것이다.
변경되지 않는 인스턴스에 대해서도 setter로 접근이 가능해져 객체의 일관성, 안정성이 보장받기 힘들다. (setter가 가능하다는 것은 불변하지 않다는 것이다)
User user = new User(team, username, password);
public User(String team, String username, int password){
this.team = team;
this.username = username;
this.password = password;
}
User newUser = User.builder()
.username(user.getUsername)
.password(passwordEncoder.encode(user.getPassword)
.name(user.getName).build();
참고 | getter메소드 사용을 지양하자
참고 | lombok 잘 사용하기잘 사용하기
참고 | 도메인 모델에 set 메소드 사용하지 않기
공부한 이후로 setter는 안쓰고 있는데 getter를 안쓰는 것은 어려운 것 같다..ㅠ