변수를 비공개(private)로 설정하는 이유는 남들이 변수에 의존하지 않게 하고싶어서이다.
그렇다면 왜 많은 프로그래머들은 get set함수를 당연하게 public으로 공개해서 private변수를 외부에 노출할까?
(참고로, 아무리 변수가 private이어도 getset함수가 public이면 그건 외부로 변수를 노출하는것이다)
→ 아무생각없이 get set함수를 설정하곤 하는데 이렇게 코드를 짜는것은 매우 나쁨. 개발자는 객체가 포함하는 자료를 표현할 가장 좋은 방법을 항상 고민해야함.
- 자료추상화
- 한마디로 interface로 만드는것!
- get set과 같은 함수를 변수사이에 넣는다해도 구현이 감춰지지않음. 구현을 감추려면 추상화가 필요
- 자료/객체 비대칭
- 절차적인 클래스와, 객체지향적인 클래스는 서로 상호 보완적인 특질이 있음
- 자료구조를 사용하는 절차적 코드는 자료구조를 변경하지 않으면서 새 함수를 추가하기 쉬움
- 객체 지향 코드는 기존 함수를 변경하지 않으면서 새 클래스를 추가하기 쉬움
- 반대의 경우에는 어려움
- 그래서 상황에 따라서 어떠한 방식의 코드를 적용해야하는지 생각해야함
- 디미터 법칙
- 잘 알려진 휴리스틱.
- 모듈은 자신이 조작하는 객체의 속사정을 몰라야한다는 법칙
- 클래스 C의 함수f는 오직 이런것만 호출해야한다
- 클래스 C
- f가 생성한 객체
- f인수로 넘어온 객체
- C 인스턴트 변수에 저장된 객체
- 이걸 어기는 코드중에 하나가 기차충돌임. 여러 객차가 한줄로 이어진 함수같아보임. 조잡하므로 피하기
-
final String outputDir = ctxt.getOptions().getScratchDir().getAbsolutePath();
- 잡종 구조 - bad
- 구조체 감추기
- 자료 전달 객체
- 공개 변수만 있고 함수가 없는 클래스를 이렇게 부름
- DTO, bean같은거
- 활성레코드 - dto의 특수형태.
'클린코드' 카테고리의 다른 글
[클린코드 독서] 5장 - 형식 맞추기 (0) | 2022.03.09 |
---|---|
[클린코드 독서] 4장 - 주석 (0) | 2022.02.06 |
[클린코드 독서] 3장 - 함수 (0) | 2022.01.30 |
[클린코드 독서] 2장 - 의미 있는 이름 (0) | 2022.01.23 |
[클린코드 독서] 1장 - 깨끗한 코드 (0) | 2022.01.23 |