본문 바로가기
07.책 리뷰

Clean Code

by chojju 2021. 12. 2.
반응형

6장 객체와 자료 구조

휴리스틱(Heuristic)
의미: 찾아내다, 발견하다, 발견법

휴리스틱이란 
 어떤 문제가 있다면 이 문제를 해결할 수 있는 방법이 증명되지 않았을 때 시행착오를 겪어가며 경험 or 직관을 활용해 효율적인 해답을 찾아나가는 기법을 의미
즉, 때려 맞추기
     어떻게, 왜 이렇게 된건진 모르겠지만 어찌어찌 하다보니 통하더라


디미터 법칙

잘 알려진 휴리스틱으로 모듈은 자신이 조작하는 객체의 속사정을 몰라야 한다는 법칙

객체는 조회 함수로 내부 구조를 공개하면 안된다는 의미


결론

객체
 - 동작을 공개하고 자료를 숨김
 - 따라서 기존 동작을 변경하지 않으면서 새 객체 타입을 추가하기쉬움
 - 기존 객체에 새 동작을 추가하기는 어려움

자료 구조
 - 별다른 동작 없이 자료를 노출함
 - 따라서 기존 자료 구조에 새 동작을 추가하기 쉬움
 - 기존 함수에 새 자료 구조를 추가하기는 어려움

시스템 구현시 
 - 새로운 자료 타입을 추가하는 유연성 필요시 -> 객체가 적합
 - 새로운 동작을 추가하는 유연성 필요시 ->자료 구조와 절차적 코드가 적합

7장 오류 처리

결론

 - 깨끗한 코드는 읽기도 좋고 안정성도 높아야함(둘이 상충되는 목표 아님)
 - 오류 처리를 프로그램 논리와 분리하면 튼튼하고 깨끗한 코드 작성 가능
 - 오류 처리를 프로그램 논리와 분리하면 독립적인 추론이 가능해지며 코드 유지보수성도 높아짐

8장 경계

 - 외부 패키지를 호출하는 코드를 줄여 경계를 관리할 것
 - 새로운 클래스로 경계를 감싸거나 Adapter 패턴 사용해 (개발자가 원하는 인터페이스를) -> (패키지가 제공하는 인터페이스로) 변환할것
 - 코드 가독성 높아지고 경계 인터페이스 사용시 일관성 높아지고 외부 패키지가 변했을경우 수정할것도 줄어듬

9장 단위 테스트

 - TDD 법칙
   :실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다
   :컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다
   :현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다

 - 테스트 코드를 깨끗하게 유지하지 않으면 결국은 잃어버린다

 - 빠르게 독립적으로(서로 의존 X) 반복가능하게(어떤 상황에서든) 자가검증하는(불 값으로 성공 아님 실패) 적시에(테스트하려는 실제 코드를 구현하기 직전에 구현)

 - 어렵네 ㅠㅠ

10장 클래스

 - 클래스
   :클래스설계 시(함수와 같이) 작게가 기본 규칙
   :클래스 이름 = 해당 클래스 책임 기술한다 + 25자 내외(접속사 제외하고)
   :단일 책임 원칙(single responsibility principle - SRP): 클래스나 모듈을 변경할 이유가 단 하나여야 한다
   :큰 클래스 몇개보다 작은 클래스 여럿으로 이뤄진 시스템이 바람직함

 - 응집도
   :클래스 함수는 클래스 인스턴스 변수를 하나 이상 사용해야 하며 함수가 변수를 많이 사용할 수록 함수와 클래스는 응집도가 높다(바람직하지 않음)
   :응집도를 유지하면 작은 클래스 여럿이 나옴

 - OCP(open closed principle), 객체 지향 설계에서 핵심원칙
   :클래스는 확장에 개방적이고 수정에 폐쇄적이어야 한다
   :새 기느을 수정하거나 기존 기능 변경시 손댈 코드가 최소인 시스템 구조가 바람직함
   :이상적 시스템: 새 기능 추가시 시스템 확장만하지 기존 코드 변경하지 않음
   :결합도 낮다 = 각 시스템 요소가 다른 요소로부터, 변경으로부터 잘 격리되어 있다(각 요소 이해하기 쉬워짐)
   :결합도 최소로 줄이면 자연스레 또 다른 클래스 설계 원칙인 DIP(dependency inversion principle)을 따르는 클래스가 나온다, DIP: 클래스는 자세한 구현이 아니라 추상화에 의존해야 한다

11장 시스템

 - 시스템은 앱 객체를 제작하고 의존성을 서로 연결하는 준비과정과 준비과정 이후에 이어지는 런타임 로직을 분리해야한다

 - main 분리: 생성과 관련한 코드는 모두 main이나 main이 호출하는 모듈로 옮기고 나머지 시스템은 모든 객체가 생성되었고 모든 의존성이 연결되었다고 가정한다

 - 소프트웨어 시스템은 물리적인 시스템과 다름. 관심사를 적절히 분리해 관리한다면 소프트웨어 아키텍처는 점진적으로 발전할 수 있다

반응형

'07.책 리뷰' 카테고리의 다른 글

왜 일하는가 - 이나모리 가즈오  (0) 2021.12.12
읽을 책 정리(개발 - 김범준 추천 도서)  (1) 2021.12.07
미라클 모닝  (0) 2021.12.06
최고의 주식 최적의 타이밍  (0) 2021.12.02
부의 대이동  (0) 2021.12.01

댓글