2 주차
화 | Assignment #09
- 📚 6장. 객체와 자료구조
- ✔️ TIL
예시) 자료의 수치를 그대로 공개하는 것이 아닌 퍼센트로 공개
Getter
/Setter
함수를 추가하지 않도록 해야 한다. (변수를 private
으로 정의하는 데에는 이유가 있음)기차 충돌
코드는 일반적으로 조잡하다 여겨지는 방식으로, 아래와 같이 행 단위로 끊어서 사용할 필요가 있다.
하지만 아래 코드의 디미터 법칙 위반 여부는 ctxt
, Options
, ScratchDir
이 객체인지 자료구조인지에 따라 다르다.
// 함수 하나가 아는 지식이 많음
final String outputDir = ctxt.getOptions().getScratchDir().getAbsolutePath();
// 1) 객체인 경우
// 1-1) 행 단위로 끊어서 작성
Options opts = ctxt.getOptions();
File scratchDir = opts.getScratchDir();
final String outputDir = scratchDir.getAbsolutePath();
// 1-2) `ctxt`가 정보를 얻는 것이 아닌 행위를 하도록 함 (구조체 감추기)
BufferedOutputStream bos = ctxt.createSctatchFileStream(classFileName);
// 2) 자료구조인 경우
final String outputDir = ctxt.options.scratchDir.absolutePath;
bean
과 같이 예외적으로 단순한 자료 구조에도 Getter
/Setter
를 정의하라 요구하는 프레임워크와 표준은 있다.)DTO
, Data Transfer Object)라 한다.활성 레코드
는 DTO
의 특수한 형태로, save
/find
같은 탐색 함수도 제공하며, DB
의 테이블이나 다른 소스에서 자료를 직접 변환한 결과이다.기차 충돌
관련 내용을 읽을 때 '이벤트 체이닝이나 함수형 프로그래밍과 같은 코딩 방식은 그러면 어떻게 대체해야 하지?' 라는 생각이 들었는데, 객체가 정보를 얻는 것이 아닌 행위를 하도록 해야 한다는 내용에서 명쾌한 해답을 얻은 듯한 느낌이었다..
)를 사용하지 말라는 법칙으로도 알려짐