210321_B책_프레임워크에는 Getter/Setter 규칙 적용

정재현·2021년 3월 21일
0

TIL2

목록 보기
21/79

오늘은 프레임워크에서의 Getter/Setter 적용을 알아본다.
객체 지향 프로그래밍 언어에서는 외부에서 클래스 필드에 직접 접근하는 경우가 드물다.
그 대신 접근을 제어할 게터와 세터 메서드를 작성한다.
게터와 세터의 구조와 명명은 표준화가 잘 되어 있어 여러 프레임워크에서 대부분 따르고있는데,
먼저 예시를 보자면.

class Astronaut {
 String name;
 boolean retired;
 
 Astronaut(String name) {
  this.name = name;
 }

 String getFullName() {
  return name;
 }
 
 void setFullName(String name) {
  this.name = name;
 }
 
 boolean getRetired() {
  return retired;
 }
 
 void setRetiredState(boolean retired) {
  this.retired = retired;
 }
}

프레임워크에서 위 클래스의 인스턴스를 사용하면 이상한 사건들이 발생할 것이다.
=>(프레임워크와 라이브러리의 차이점을 간단하게 설명하자면 프레임워크는 짜여진 틀안에 들어가서 작업하는것, 라이브러리는 필요한 기능을 가져와서 작업하는 것. 이라고 이해하고 있었는데 둘의 결정적인 차이점은 '자유도'이다. 프레임워크를 사용하면 정해진 규약을 반드시 지키면서 진행해야하고 라이브러리는 더 자유롭다.)

좀더 올바르게 게터와 세터를 설정해보면,

class Astronaut {
 private String name;
 private boolean retired;
 
 public Astronaut() {
 }
 
 public Astronaut(String name) {
  this.name = name;
 }

 public String getName() {
  return name;
 }
 
 public void setName(String name) {
  this.name = name;
 }
 
 public boolean isRetired() {
  return retired;
 }
 
 public void setRetired(boolean retired) {
  this.retired = retired;
 }
}

먼저 필드의 한정자를 private으로 교체했고, 게터와 세터는 public으로 바꾸었다.
다음으로 기본 생성자를 추가했다.
기본 생성자는 대부분의 프레임워크에 필요한데 기본 생성자로 클래스의 빈 인스턴스를 만든 후
설정할 때는 세터를 호출해 필드에 값을 할당한다.
매개 변수를 갖는 생성자를 추가하면 기본 생성자를 더 이상 쓸 수 없다는 특징 때문에
이 부분을 간과하기 쉽다.
마지막으로 필드명을 넣어 게터와 세터를 다시 명명했다.
필드명이 foo이면 게터와 세터는 getFoo() / setFoo()로 명명하는데
boolean이라면
게터는 isFoo()라고 세터는 setFoo() 라고 명명한다.

확실히 위의 예시보다 아래의 올바른 코드가 더 명확한게 느껴진다.

오늘의 코멘트: 기본 생성자의 궁금증이 해결되었다..!

profile
"돈받고 일하면 프로다"

0개의 댓글