Setter 메서드를 사용하면 객체의 상태를 변경할 수 있는 유연성을 제공하지만, 동시에 여러 가지 단점과 문제를 초래할 수 있습니다. 다음은 Setter 메서드를 사용함으로써 발생할 수 있는 주요 문제들입니다:
1. 객체의 일관성 깨짐
- 불완전한 상태: 객체가 생성된 후 Setter 메서드를 통해 필드가 변경되면, 객체가 불완전하거나 일관성 없는 상태로 존재할 수 있습니다.
- 상태 검증 어려움: 생성자와 달리 Setter 메서드는 각 필드의 변경 시점에서 일관성 검증을 수행하기 어렵습니다.
2. 캡슐화 위반
- 내부 구현 노출: Setter 메서드는 객체의 내부 상태를 외부에 노출시킴으로써 캡슐화를 위반할 수 있습니다.
- 무분별한 접근: 외부 코드가 객체의 내부 상태에 직접 접근하고 변경할 수 있게 되어, 코드의 응집도를 낮추고 결합도를 높입니다.
3. 상태 추적 어려움
- 변경 추적 어려움: Setter 메서드를 통해 여러 곳에서 객체의 상태를 변경할 경우, 변경의 원인과 시점을 추적하기 어렵습니다.
- 디버깅 복잡성 증가: 상태 변경의 출처를 파악하기 어려워 디버깅이 복잡해질 수 있습니다.
4. 테스트 및 유지보수 어려움
- 테스트 복잡성: Setter 메서드를 통해 상태가 변경되면, 다양한 상태를 테스트해야 하므로 테스트 케이스가 증가하고 복잡해집니다.
- 유지보수 어려움: 많은 곳에서 상태 변경이 이루어지면, 유지보수 시 모든 변경 지점을 고려해야 하므로 복잡도가 높아집니다.
5. 불변성 깨짐
- 동시성 문제: 멀티스레드 환경에서 Setter 메서드를 사용하면, 객체의 상태가 예상치 못하게 변경될 수 있어 동기화 문제를 야기할 수 있습니다.
- 불변성 유지 어려움: 불변 객체로 설계하려면 Setter 메서드를 제공하지 않아야 합니다.