6장 객체와 자료 구조
자료 추상화
- 인터페이스는 자료구조를 명백하게 표현한다.
- 변수를 private으로 선언하더라도 조회함수(get), 설정함수(set)을 제공한다면 구현을 외부로 노출시키는 셈이다.
- 구현을 감추려면 추상화가 필요하다.
- 추상 인터페이스를 제공해 사용자가 구현을 몰른 채 자료를 조작할 수 있어야, 진정한 의미의 클래스이다.
자료/객체 비대칭
- 객체는 추상화 뒤로 자료를 숨기고, 자료를 다루는 함수만 공개한다.
- 자료구조는 자료를 그대로 공개하고, 함수는 다루지 않는다.
- 새로운 자료 타입이 필요한 경우, 클래스와 객체 지향 기법이 적합하다.
- 새로운 함수가 필요한 경우, 절차적인 코드와 자료 구조가 적합하다.
디미터 법칙
- 디미터 법칙이란, 모듈은 자신이 조작하는 객체의 속사정을 몰라야한다는 법칙
기차 충돌 (train wreck)
- 아래와 같은 코드를 기차충돌이라고 부른다.
- 한 줄에 여러개의 함수를 사용하면, 조잡해보일 수 있다.
// Bad String outputpath = ctxt.getOptions().getScratchDir().getAbsolutePath();
- 여러개의 함수는 나누는 편이 좋다.
// Good Options opts = ctxt.getOptions(); File scratchDir = opts.getScratchDir(); String outputDir = scratchDir.getAbsolutePath();
잡종 구조
- 잡종 구조란 객체와 자료 구조가 섞인 코드
- 잡종 구조는 피하는 편이 좋다.
자료 전달 객체 (Data Transfer Object, DTO)
- 자료 구조체는 public 변수만 있고, 함수는 없는 클래스이다.
- 흔히 DB에 저장된 정보를 코드에서 사용할 객체로 변환하는 과정에서 가장 처음 사용하는 구조체이다.
활성 레코드
- 공개 변수가 있거나 비공개 변수에 조회/설정 함수가 있는 자료구조 + save, find 같은 탐색 함수도 제공한다.
- 활성 레코드는 자료 구조로 취급한다.
정리
- 새로운 자료 타입을 추가하는 경우 객체가 적합하다.
- 새로운 동작을 추가하는 경우 자료 구조와 절차적 코드가 적합하다.
'프로그래밍' 카테고리의 다른 글
[클린코드] 6,7장 정리 (1) | 2023.10.18 |
---|---|
[클린코드] 7장 오류 처리 (0) | 2023.10.15 |
Architecture Decision Record (ADR)이란? (0) | 2023.05.27 |
유스케이스 (Usecase) (0) | 2023.04.26 |
VisualStudio Copilot 설치하기 (0) | 2023.03.30 |