public 필드가 있을 땐
그 필드를 private로 만들고 필드용 읽기 메서드와 쓰기 메서드를 작성하자
동기
- 객체지향의 주요 원칙 중 하나는 캡슐화이다
- 그러므로 데이터는 절대 public 타입으로 선언되면 안된다
- 데이터를 public 타입으로 만들면 데이터가 있는 객체가 모르는 사이에 다른 객체가 데이터 값을 읽고 변경할 수 있다
- 이로 인해 데이터와 기능이 분리된다
- 데이터와 데이터를 사용하는 기능이 한 곳에 모여있으면 코드를 수정하기 쉽다
방법
- 캡슐화 할 필드를 위한 읽기 메서드(getter)와 쓰기 메서드(setter)를 작성한다
- 클래스 외부에서 그 필드를 참조하는 모든 부분을 찾아서
1
에서 작성한 메서드로 대체한다 - 참조하는 부분을 모두 수정했다면 필드를
private
으로 변경한다
사실상 getter, setter를 적용하는 것은 public 메서드를 쓸때와 별 다를것이 없고, 문제도 해결되지 않는다
일단 이런식으로 필드 직접 접근을 막은 다음, 불필요한 읽기/쓰기 메서드 호출 부분을 제거해야한다
참고 : 마틴 파울러, 『리팩토링』, 김지원 옮김, 한빛미디어(2012)