클래스나 모듈을 변경할 이유가 단 하나뿐이어야 한다.
책임 == 변경할 이유
단일 책임 원칙을 무시한 예시
class Animal {
constructor(name: string){ }
getAnimalName() { }
saveAnimal(a: Animal) { }
}
단일 책임 원칙을 지키도록 변경
class Animal {
constructor(name: string){ }
getAnimalName() { }
}
class AnimalDB {
getAnimal(a: Animal) { }
saveAnimal(a: Animal) { }
}
인터페이스와 추상 클래스를 사용해 구현이 미치는 영향을 격리해야 한다..!
자신보다 변하기 쉬운 것에 의존하지 말고 변하기 어려운 것에 의존해라.
적용 전
적용 후
아래는 사용과 제작을 분리하는 메커니즘들.
ex) 스프링 프레임 워크 : 자바 DI 컨테이너를 제공.
창발성 : 하위 계층(구성 요소)에는 없는 특성이나 행동이 상위 계층(전체 구조)에서 자발적으로 돌연히 출현하는 현상
아래 나열은 중요도 순서.
https://doublem.org/SOLID_SRP_OCP/
https://server-engineer.tistory.com/228
https://velog.io/@jwkim/Clean-Code-11%EC%9E%A5-%EC%8B%9C%EC%8A%A4%ED%85%9C
https://tech-interview.tistory.com/119
https://victorydntmd.tistory.com/299
https://velog.io/@jwkim/Clean-Code-12%EC%9E%A5-%EC%B0%BD%EB%B0%9C%EC%84%B1