- ☆ 표시가 붙은 부분은 스터디 중 나온 얘기 혹은 제 개인적인 생각이나 제가 이해한 방식을 적어놓은 것으로, 책에서 말하고자 하는 바와 다를 수 있습니다.
- 모든 이미지의 출처는 클린 코드(로버트 C. 마틴 저) 책 입니다.
6장 객체와 자료 구조
⚈ ☆ 이 책에서 얘기하는 '자료 구조'는 큐, 스택 이런게 아니라 '데이터만 있는 클래스'를 의미하는 것 같다. C 계열의 struct로 생각하면서 책을 보면 말이 맞다. 이하의 struct의 경우 예를들어 자바로 생각하면 아래와 같이 나타낼 수 있을 것이다. 함수 없이 데이터만 있는 클래스 구조로 생각하고 보면 책이 읽히니 그렇게 생각하면 될 것 같다.
typedef struct {
int* arr;
int rear;
int capacity;
} priority_queue_t;
----
public class PriorityQueue {
public int[] arr;
public int rear;
public int capacity;
public PriorityQueueOperations priorityQueueOperations;
}
⚈ 변수를 private으로 선언하더라도 각 값마다 getter와 setter를 제공한다면 구현을 외부로 노출하는 셈이다.
- ☆ 바로 위의 코드에 있는 데이터만 가지는 클래스와, 저기서 전부 private으로 바꾸고 전부 getter, setter 넣어준 클래스가 뭐가 다를까? 동일하다. 변경될 수 있는 어떤 것이라도 캡슐화 해야 한다.
- 추상 인터페이스를 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 진정한 의미의 클래스다.
⚈ 모든 것이 객체라는 생각은 미신이다.
- 객체 지향 코드에서 어려운 변경은 절차적인 코드에서 쉬우며, 절차적인 코드에서 어려운 변경은 객체 지향 코드에서 쉽다.
- 때로는 단순한 자료 구조와 절차적인 코드가 가장 적합한 상황도 있다.
⚈ 디미터 법칙
- 모듈은 자신이 조작하는 객체의 속사정을 몰라야 한다는 법칙이다.
- ☆ 간단히 말해 하나의 도트만 사용하라는 법칙이다.
- ☆단 이건 객체의 내부 구조가 외부로 노출되는 경우의 결합도에 관한 얘기이다. 따라서 내부 구조에 대한 도트 여러개는 상관 없다. 예를들어 이하의 코드는 디미터 법칙을 어기지 않는다.
IntStream.of(1, 15, 20, 3, 9).filter(x->x>10).distinct().count();
⚈ 객체는 동작을 공개하고 자료를 숨긴다.
- 기존 동작을 변경하지 않으면서 새 객체 타입을 추가하기는 쉬운 반면, 기존 객체에 새 동작을 추가하기는 어렵다.
⚈ 자료 구조는 별다른 동작 없이 자료를 노출한다.
- 기존 자료 구조에 새 동작을 추가하기는 쉬우나, 기존 함수에 새 자료 구조를 추가하기는 어렵다.
⚈ 우수한 소프트웨어 개발자는 편견없이 위 사실을 이해해 직면한 문제에 최적인 해결책을 선택한다.
'Study > 클린코드' 카테고리의 다른 글
[클린코드] 8장. 경계 (0) | 2023.01.02 |
---|---|
[클린코드] 7장. 오류 처리 (0) | 2023.01.02 |
[클린코드] 5장. 형식 맞추기 (0) | 2023.01.02 |
[클린코드] 4장. 주석 (0) | 2022.12.21 |
[클린코드] 3장. 함수 (0) | 2022.12.20 |
댓글