객체는 추상화 뒤로 자료를 숨긴 채 자료를 다루는 함수만 공개합니다.
자료 구조는 자료를 그대로 공개하며 별다른 함수를 제공하지 않습니다.
get, set을 제공한다고 클래스가 되는게 아니라 추상화를 통해 구현을 감추고 자료의 핵심을 조작할 때 진정한 의미의 클래스를 구현할 수 있습니다.
분별 있는 프로그래머는 모든 것이 객체라는 생각이 미신임을 잘 안다.
절차 지향이 적합한 상황이 있고 객체 지향이 적합한 상황이 있습니다.
절차 지향 코드는 기존 자료 구조를 변경하지 않으면서 새 함수를 추가하기 쉽고
새로운 자료 구조를 추가하기 어렵습니다.
객체 지향 코드는 기존 함수를 변경하지 않으면서 새 클래스를 추가하기 쉽고
새로운 함수를 추가하기 어렵습니다.
1
2
3
4
5
final String outputDir = ctxt.getOptions().getScratchDir().getAbsolutePath();
Options opts = ctxt.getOptions();
File scratchDir = opts.getScratchDir();
final String outputDir = scratchDir.getAbsolutePath();
ctxt가 객체라면 면가를 하라고 말해야지 속을 드러내라고 말하면 안 된다.
1
BufferedOutputStream bos = ctxt.createScratchFileStream(classFileName);
createScratchFileStream
도 결국 내부에서 체이닝을 써야하지 않나? 라고 생각했엇는데 클래스 외부에 노춣이 되냐 안되냐가 중요하다는 것을 뒤늦게 깨달았습니다.😓