내가 이걸 이해하고 있나? 싶어서
책읽는걸 그만두고 다른걸 해보다가 다시 내가 정리한 글들을 읽어봤다
체감상 10~30%만 실제로 응용하고 나머지는 안하고 있는 기분인데
%를 더 끌어올리게 노력해야겠다.
class
* SOLID
S : SRP(Single Responsibility Principle, 단일책임원칙)
하나의 객체는 하나의 책임(객체간 영향을 최소화하고 한가지 동작만을 수행)만을 가지도록 설계.
O : OCP(Open Closed Principle, 개방폐쇄원칙)
변경에는 닫혀있고 개방에는 열려있다.
→ 기존의 코드를 변경하지 않으면서 기능을 추가할 수 있도록 로직이 설계되어야 한다.
→ 클래스, 객체를 변경하지 않고도 클래스 환경을 변화할 수 있도록 구성한다.
L : LSP(Liskov Substitution Principle)
부모 클래스와 자식 클래스 간의 일관성이 있어야 한다.
→ 클래스를 재정의하지 않으며, 자식 클래스는 최소한 부모 클래스의 행위는 수행할 수 있어야 한다.
I : ISP(Interface Segregation Principle)
구체화보다는 추상화
→ 범용 인터페이스로 인해 여러 클라이언트(클래스)가 영향을 받기 보다는, 개별적인 클라이언트에 특화되어 서로의 영향을 최소화할 수 있도록 구성
D : DIP(Depedency Inversion Principle)
의존관계 역전 원칙
상위 계층(정책 결정)이 하위 계층(세부 사항)에 의존하는 전통적인 의존관계를 반전(역전)
→ 상위 모듈은 하위 모듈의 구현 내용에 의존하면 안 되고 상위 모듈과 하위 모듈 모두 추상화된 내용에 의존
깨끗한 클래스를 만드는법에 대해 다루는 챕터
그렇다면 깨끗한 클래스란?
캡슐화
클래스 외부 사용자는 사용하면서 내부 구현을 알 필요가 없고, 알아야할 이유도 없다.
클래스에서 꺼내와서 데이터 처리 X
객체에게 처리할 행위(method) 요청 O
캡슐화를 유지해야 좋은 클래스
풀어주는건 최후의 수단?
작은 클래스
클래스는 함수와 마찬가지로 하나의 역할만(SRP), 작은 크기
- 만능 클래스보다는 하나의 책임
- 이름은 해당 클래스의 책임
- 모호한 이름 금지(Processor, Manager, Super 등) -> 여러 역할을 한다는걸 내포
- and, but 등 사용금지 -> 여러 역할을 한다는것 내포
응집도 up
보통 응집도를 높은 클래스 선호
클래스에 속한 메소드, 변수가 서로 의존하며 논리적인 단위로 묶인다
-> 큰 함수(클래스)를 여러개의 작은 역할로 나누면 응집도가 높아짐
변경하기 쉬운 클래스 & 변경으로부터 격리된 클래스
상세한 구현은 구현 요구사항이 바뀔때마다 위험에 빠진다 -> 인터페이스 & 추상 클래스를 통해
구현
클래스가 SRP, OCP 등 SOLID 원칙을 잘 만족했다면 요구사항이 변경되어도 유연한 대처가 가능
결합도가 낮다 -> 변경에 영향받는 클래스가 격리되어 있어서 대처가 유연하다
ex) 레포지토리 패턴
https://0391kjy.tistory.com/39
템플릿 메소드 패턴
https://gmlwjd9405.github.io/2018/07/13/template-method-pattern.html
'독서 > cleancode' 카테고리의 다른 글
cleancode - unit test (0) | 2022.01.25 |
---|---|
clean code - 경계 (0) | 2022.01.24 |
cleancode - 오류처리 (0) | 2022.01.22 |
cleancode - 객체와 자료구조 (0) | 2022.01.21 |
clean code - 주석 & 형식 맞추기 (0) | 2022.01.20 |