본문 바로가기
북스터디/클린코드

06장 - 객체와 자료 구조

by 혀닙 2025. 5. 21.
📘 클린 코드 북스터디 정리입니다

📚 도서: 로버트 C. 마틴 《Clean Code》
🧑‍💻 목적: 좋은 코드에 대한 감각과 습관을 익히기 위해
🗓️ 진행 기간: 2025년 5월 ~ 매주 2장

📖 [06장] 객체와 자료 구조


✅ 핵심 요약 (Key Takeaways)

이 장의 핵심 문장은?

우수한 소프트웨어 개발자는 편견 없이 사실을 이해해 직면 문제에 최적인 해결책을 선택한다.

저자가 전달하고자 하는 메시지 요약

  • 객체는 동작을 공개하고 자료는 숨기기 때문에 기존 동작을 변경하지 않으면서 새 동작을 추가하기는 쉬우나, 기존 함수에 새 자료구조를 추가하기는 어려움
  • 자료구조는 동작 없이 자료만 공개하기 때문에 기존 자료 구조에 새 동작을 추가하기는 쉬우나, 기존 함수에 새 자료 구조를 추가하기는 어려움
  • 따라서 각각의 상황에 맞게, 새로운 자료 구조를 추가해야 하는 경우에는 객체지향 코드를, 새로운 동작을 추가해야 하는 경우 자료구조와 절차적 코드를 선택할 것

💡내용 정리

자료 추상화

  • getter와 setter를 모두 제공하는 무의미한 캡슐화 지양
  • 구현을 감추려면 추상화가 필요
  • 추상 인터페이스를 제공해 사용자가 구현을 모른 채 자료의 핵심을 조작할 수 있어야 진정한 의미의 클래스

자료/객체 비대칭

객체

  • 추상화 뒤로 자료를 숨긴 채 자료를 다루는 함수만 공개

자료구조

  • 자료를 그대로 공개하며 별다른 함수는 제공하지 않음

절차적인 코드

  • 기존 자료 구조를 변경하지 않으면서 새 함수를 추가하기 쉬움
  • 새로운 자료 구조 추가가 어려움. 모든 함수를 고쳐야 함

객체 지향 코드

  • 기존 함수를 변경하지 않으면서 새 클래스를 추가하기 쉬움
  • 새로운 함수 추가가 어려움. 모든 클래스를 고쳐야 함

상황에 적합한 코드 스타일 선택

  • 새로운 함수가 아닌 새로운 자료 타입이 필요한 경우: 클래스와 객체 지향 기법이 적합
  • 새로운 자료 타입이 아니라 새로운 함수가 필요한 경우: 절차적인 코드와 자료구조가 적합

디미터 법칙

  • 모듈은 자신이 조작하는 객체의 속사정을 몰라야 한다
  • 클래스 C의 메서드 f는 다음 객체들의 메서드만 호출 가능:
    • 클래스 C
    • f가 생성한 객체
    • f 인수로 받은 객체
    • C의 인스턴스 변수로 저장된 객체

기차충돌(train wreck)

  • 조잡하고 가독성 떨어짐, 피하는 것이 좋음
  • 디미터 법칙 위반 여부는 요소가 객체인지 자료구조인지에 따라 다름

잡종구조

  • 객체와 자료구조의 단점만 모은 구조, 피해야 함

구조체 감추기

  • 객체는 무언가를 동작하게 해야지 내부 속성을 노출하면 안 됨

자료 구조체 종류

  • DTO: 공개 변수만, 함수 없음
  • Bean: 비공개 변수 + getter/setter
  • 활성 레코드: save/find 같은 탐색 함수 포함 → 자료구조로 간주

결론

객체

  • 동작을 공개하고 자료를 숨김
  • 새 객체 타입은 쉽게 추가 가능, 새 동작 추가는 어려움

자료구조

  • 동작 없이 자료만 노출
  • 새 동작 추가는 쉬움, 새 자료 구조 추가는 어려움

적절한 선택

  • 새로운 자료 타입 필요 → 객체 사용
  • 새로운 동작 필요 → 자료구조 + 절차형 코드

💡 인상 깊었던 문장 & 나의 인사이트

책에서 가장 기억에 남는 문장

우수한 소프트웨어 개발자는 편견 없이 사실을 이해해 직면 문제에 최적인 해결책을 선택한다.

왜 인상 깊었는가

결국 소프트웨어 개발은 선택의 연속이라는 점을 다시금 느꼈다.


어떤 방식이든 장단점이 있고, 그 선택은 서로 다른 결과를 만든다.
상황에 맞는 올바른 선택을 하려면, 각 방식의 특징과 그로 인한 결과를 예측할 수 있어야 한다.


절차적 코드와 객체지향 코드의 차이, 각각의 장단점,
자료구조와 객체의 차이와 용도,
그리고 각 스타일이 어떤 상황에 적합한지.


결국, 다 알아야 선택도 할 수 있다는 것!


지금은 이 모든 개념을 완전히 이해했다고는 말할 수 없다.

하지만 그렇기 때문에 더 인상 깊었고,
좋은 코드를 쓰기 위해선 반드시 넘어야 할 관문처럼 느껴진다.


앞으로는 새로운 코드든 기존 코드든 마주할 때마다,
“이건 동작 중심인가? 자료 중심인가?”를 먼저 떠올려 보고
왜 이 스타일이 선택되었는지 판단해보는 연습을 해보자.


하나하나 배워가며, 작지만 확실한 실천으로
더 나은 선택을 위한 준비를 하자!


🛠 실무 적용 아이디어 (To Action)

나의 코드에서 개선해볼 부분은?

  • EntityDTO 클래스에 @Getter, @Setter 어노테이션을 무분별하게 사용하고 있지는 않은지 점검
  • 불필요하게 구현이 외부에 노출되고 있지 않은지 확인

오늘부터 실천할 작고 구체적인 실천

  • 클래스를 작성할 때, 이게 자료구조인지 객체인지 먼저 인식하기
  • 객체라면 Getter/Setter 대신 동작 중심의 메서드로 감싸는 구조 설계 고민

'북스터디 > 클린코드' 카테고리의 다른 글

08장 - 경계  (0) 2025.05.29
07장 - 오류 처리  (0) 2025.05.26
05장 - 형식 맞추기  (1) 2025.05.20
04장 주석(Comments)  (1) 2025.05.18
03장 - 함수  (0) 2025.05.18

댓글