[클린코드] 14일차. 123-131pg | 디미터 법칙, 예외처리
14일차.
클린코드[3주차_화요일]
123-131pg
#요약
6. 객체와 자료구조
1) 자료 추상화
2) 자료/객체 비대칭
3) 디미터 법칙
- 모듈은 자신이 조작하는 객체의 속사정을 몰라야 한다는 법칙
a. 기차 충돌
final String outputDir = stxt.getOptions().getScratchDir().getAbsolutePath();
- 여러 객체가 한 줄로 이어진 기차처럼 보이기 때문에 위와 같은 코드를 기차 충돌이라고 한다.
- 기차충돌 코드는 조잡하다.
- 위코드를 깨끗하게 하는 법
Options opts = ctxt.getOptions();
File scratchDir = opts.getScaratchDir();
final String outputDir = scratchDir.getAbsolutePath();
- 자료구조는 무조건 함수 없이 공개 변수만 포함하고 객체는 비공개 변수와 공개 함수를 포함한다면 좋다.
- 자료구조는 디미터 법칙을 논할 필요가 없다.
b. 잡종 구조
- 위와 같은 혼란 때문에 때때로 절반은 객체, 절반은 자료 구조인 잡종구조가 나온다.
c. 구조체 감추기
- 객체라면 뭔가를 하라고 말해야지, 속을 드러내면 안된다.
4) 자료 전달 객체
- 자료 구조체의 전형적 형태는 공개 변수만 있고 함수는 없는 클래스다.
- 이런 자료 구조체는 때로는 자료 전달 객체(Data Transfer Object, DTO)라고 한다.
a. 활성 레코드
- 활성 레코드는 DTO의 특수한 형태
- 활성 레코드는 데이터베이스 테이블이나 다른 소스에서 자료를 직접 변환한 결과다.
- 활성 레코드에 비즈니스 규칙 메서드를 추가해서 이런 자료 구조를 객체 로 취급하는 코드는 자료구조도 객체도 아닌 잡종구조다.
- 해결책은 활성구조를 자료구조로 취급한다.
5) 결론
- 객체는 동작을 공개하고 자료를 숨긴다.
- 어떤 시스템을 구현할 때, 새로운 자료 타입을 추가하는 유연성이 필요하면 객체가 더 적합하다.
- 새로운 동작을 추가하는 유연성이 필요하면 자료구조와 절차적인 코드가 더 적합하다.
7. 오류처리
- 뭔가 잘못될 가능성은 항상 존재하고 그것을 바로 잡을 책임은 프로그래머들에게 있다.
- 우아하고 고상하게 오류처리하는 법
1) 오류 코드보다 예외를 사용하라