본문 바로가기

Java

Getter, Setter 어노테이션

 

Getter와 Setter를 사용하는 이유는 

객체 지향의 원칙 중 하나인 정보 은닉 원칙을 지키려고 사용을 합니다.

이 원칙은 객체의 구체적인 정보를 외부로 노출시키지 마라 라는 얘기를 하고 있습니다.

 

자바에서 사용을 하게 되면 

클래스 내의 모든 필드들은 private으로 생성을 함으로 

필드의 정보를 외부에서 건드릴 수 없게 합니다.

이 정보들을 변경하거나 가져오기를 원하면 public get, set 메서드를 생성해서 

변경을 하거나, 가져오면 됩니다.

 

 

setter의 단점에는 

객체의 속성이 갖는 값을 바꾼 이유를 명확하게 알 수 없고,

데이터를 변경하려고 하는데 이때 setter를 사용해서 코드를 작성을 하게 되면

setter를 나열한 것만으로 어떤 의도로 데이터를 변경하는지 명확히 알 수 없습니다.

 

객체의 일관성을 유지하기 어렵습니다.

setter는 public으로 되어있기 때문에 변경 메서드뿐만 아니라

모든 곳에서 정보를 변경할 수 있는 상태가 됩니다.

 

그래서 setter 대신 다른 것을 사용하기를 지향합니다.

그 방법은 생성자 오버로딩을 사용합니다.

하지만 이 방법은 멤버변수가 많고 다양한 생성자를 가져야 한다면

코드가 길어지고, 가독성이 떨어집니다.

 

이를 해결하기위해 Builder 패턴을 사용합니다.

이 방법을 사용하면 유지보수 및 가독성이 향상되고 또한 객체를 생성할 때 값의 순서가 상관이 없습니다.

 

또 다른 방법에는 정적 팩토리 메서드가 있습니다.

정적 팩토리 메서드를 사용하면 이름을 가질 수 있어 반환될 데이터를 추측할 수 있습니다.

 

getter 지양 이유는 

캡슐화의 의미가 없어집니다.

private으로 필드를 선언하고 public으로 아무 곳에서나 값을 꺼내올 수 있다면 상태정보가 그대로 노출됩니다.

이러면 필드를 private으로 선언한 의미가 없어집니다.

 

getter 또한 다른 것을 사용하는 걸 지향합니다.

그 방법은 만약 특정 값이 객체의 값과 같은 지

확인을 하려면 객체에 특정 값을 넘겨주고 값이 같은지 안 같은지 여부만

응답받는 식의 방법으로 설계를 진행합니다.