개발자 99% 커뮤니티에서 수다 떨어요!
TIL (Today I Learned)
2022.03.02
오늘 읽은 범위
6장. 객체와 자료구조
책에서 기억하고 싶은 내용을 써보세요.
무엇을 공개하고 무엇을 공개하지 않을까?
(자료 구조를 사용하는) 절차적인 코드는 기존 자료 구조를 변경하지 않으면서 새 함수를 추가하기 쉽다. 반면, 객체 지향 코드는 기존 함수를 변경하지 않으면서 새 클래스를 추가하기 쉽다
모듈은 자신이 조작하는 객체의 속사정을 몰라야 한다는 법칙
클래스 C
f가 생성한 객체
f 인수로 넘어온 객체
C 인스턴스 변수에 저장된 객체
// 한 줄로 세우면 기차충돌이라 분리했음에도...
Options opts = ctxt.getOptions();
File scratchDir = opts.getScratchDir();
final String outputDir = scratchDir.getAbsolutePath();
// 자료 구조일 때 이렇게하면 더 좋았을 것
final String outputDir = ctxt.options.scratchDir.absolutePath;
디미터 법칙을 위반하는지 여부는 ctxt, Options, ScratchDir이 객체인지 아니면 자료 구조인지에 달렸다.
if 표준(빈,bean)의 존재 ⇒ 단순한 자료구조에도 조회함수와 설정함수를 설정하라
절반 객체, 절반 절차
자료구조가 아니라면 숨겨야한다
// 썩 내키지 않음
ctxt.getAbsolutePathOfScratchDirectoryOption();
// 코드를 살펴 본 후 새로이...
BufferedOutputStream bos = ctxt.createScratchFileStream(classFileName);
==자료 구조체의 전형적인 형태는 공개 변수만 있고 함수가 없는 클래스 (DTO)
데이터베이스와 통신하거나 소켓에서 받은 메시지의 구문을 분석
빈 구조 ⇒ private 으로 데이터 선언, 조회생성자를 별도로 둠 ⇒ 별로 이점이 없음.
자료구조로 취급하라
시스템을 구현할 때, 새로운 자료 타입을 추가하는 유연성이 필요하면 객체가 더 적합
새로운 동작을 추가하는 유연성이 필요하면 자료 구조와 절차적인 코드가 더 적합
오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요
어찌보면 나의 코드 습관은 순수 OO 주의자에 가까웠다. 조금 유연하게 표준을 정하는 것이 좋을 것 같다.
디미터 법칙을 잘 지킨다고 생각했음에도 불구하고 활성레코드를 잡종으로 만들어 버리는 일은 흔했던 것 같다. 유의하자.
궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.