본문 바로가기
Study/클린코드

[클린코드] 6장. 객체와 자료 구조

by Nahwasa 2023. 1. 2.

스터디 메인 페이지

 

- ☆ 표시가 붙은 부분은 스터디 중 나온 얘기 혹은 제 개인적인 생각이나 제가 이해한 방식을 적어놓은 것으로, 책에서 말하고자 하는 바와 다를 수 있습니다.

- 모든 이미지의 출처는 클린 코드(로버트 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

댓글