Getter와 Setter를 사용하는 이유는
객체 지향의 원칙 중 하나인 정보 은닉 원칙을 지키려고 사용을 합니다.
이 원칙은 객체의 구체적인 정보를 외부로 노출시키지 마라 라는 얘기를 하고 있습니다.
자바에서 사용을 하게 되면
클래스 내의 모든 필드들은 private으로 생성을 함으로
필드의 정보를 외부에서 건드릴 수 없게 합니다.
이 정보들을 변경하거나 가져오기를 원하면 public get, set 메서드를 생성해서
변경을 하거나, 가져오면 됩니다.
setter의 단점에는
객체의 속성이 갖는 값을 바꾼 이유를 명확하게 알 수 없고,
데이터를 변경하려고 하는데 이때 setter를 사용해서 코드를 작성을 하게 되면
setter를 나열한 것만으로 어떤 의도로 데이터를 변경하는지 명확히 알 수 없습니다.
객체의 일관성을 유지하기 어렵습니다.
setter는 public으로 되어있기 때문에 변경 메서드뿐만 아니라
모든 곳에서 정보를 변경할 수 있는 상태가 됩니다.
그래서 setter 대신 다른 것을 사용하기를 지향합니다.
그 방법은 생성자 오버로딩을 사용합니다.
하지만 이 방법은 멤버변수가 많고 다양한 생성자를 가져야 한다면
코드가 길어지고, 가독성이 떨어집니다.
이를 해결하기위해 Builder 패턴을 사용합니다.
이 방법을 사용하면 유지보수 및 가독성이 향상되고 또한 객체를 생성할 때 값의 순서가 상관이 없습니다.
또 다른 방법에는 정적 팩토리 메서드가 있습니다.
정적 팩토리 메서드를 사용하면 이름을 가질 수 있어 반환될 데이터를 추측할 수 있습니다.
getter 지양 이유는
캡슐화의 의미가 없어집니다.
private으로 필드를 선언하고 public으로 아무 곳에서나 값을 꺼내올 수 있다면 상태정보가 그대로 노출됩니다.
이러면 필드를 private으로 선언한 의미가 없어집니다.
getter 또한 다른 것을 사용하는 걸 지향합니다.
그 방법은 만약 특정 값이 객체의 값과 같은 지
확인을 하려면 객체에 특정 값을 넘겨주고 값이 같은지 안 같은지 여부만
응답받는 식의 방법으로 설계를 진행합니다.
'Java' 카테고리의 다른 글
(Java) OAuth (0) | 2024.09.09 |
---|---|
객체 지향 프로그램(OOP) (0) | 2024.08.30 |
Rest, API, Restful API 간단 (0) | 2024.08.28 |
Java 관심사 분리(SOC), 관점 지향 프로그래밍(AOP) 간단하게 (0) | 2024.08.28 |
Java Spring, 객체 지향 프로그래밍 (7) | 2024.08.27 |