📘 클린 코드 북스터디 정리입니다
📚 도서: 로버트 C. 마틴 《Clean Code》
🧑💻 목적: 좋은 코드에 대한 감각과 습관을 익히기 위해
🗓️ 진행 기간: 2025년 5월 ~ 매주 2장
📚 도서: 로버트 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)
나의 코드에서 개선해볼 부분은?
Entity나DTO클래스에 @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 |
댓글