티스토리 뷰
요약
10. 클래스
변경으로부터 격리
인터페이스와 추상 클래스를 사용해 구현이 미치는 영향을 격리한다.
구체적인 클래스는 상세한 구현(코드)을 포함하고, 추상클래스는 개념을 포함하기 때문
즉 시스템의 결합도를 낮추면 유연성과 재사용성이 높아짐
*DIP(Dependncy Inversion Principle) 는 클래스가 상세한 구현이 아니라 추상화에 의존해야 한다는 원칙임.
11. 시스템
시스템 제작과 시스템 사용을 분리하라
제작과 사용은 아주 다르다.
*초기화 지연(계산 지연)
장점: 실제로 필요할 때까지 객체를 생성하지 않아 불필요한 부하가 없음
단점: 런타임 로직에서 의존성 문제가 발생해 컴파일 에러가 나타남, 테스트도 어려움
방법1. Main 분리
생성과 관련한 코드는 모두 main이나 main을 호출하는 모듈로 이동하는 방법
객체 생성시점은 애플리케이션이 모름. 단순히 사용만 하는 형태
방법2. 팩토리
객체 생성 시점을 애플리케이션이 결정해야 할 때 ABSTRACT FACTORY 패턴을 사용한다.
발췌
소프트웨어 시스템은 (애플리케이션 객체를 제작하고 의존성을 서로 ‘연결’하는) 준비과정과 (준비 과정 이후에 이어지는) 런타임 로직을 분리해야 한다.
클래스를 설계하는 코드와 그 클래스를 인스턴스로 사용하는 코드는 따로 작성해야 한다.
메모
클래스 구현할 때 인터페이스나 추상 클래스를 사용해야 한다는 건 알고 있었는데 왜 그래야 하는지 명확하게 설명하지 못했었다. 책에서 나온대로 시스템의 결합도는 낮추는 거라는 걸 알게 됨
시스템 파트는 중요하지만, 스프링이랑 다른 부분도 있기 때문에 개념적인 부분만 취하면 될 듯
NestJS에서는 main과 Factory 다 지원하고 있기 때문에 그동안 크게 신경쓰지 못한 부분이었다.
'Book' 카테고리의 다른 글
Clean Code (클린코드) | 11. 시스템 198-205 (0) | 2023.08.25 |
---|---|
Clean Code (클린코드) | 10. 클래스 179-188 (0) | 2023.08.22 |
Clean Code (클린코드) | 10. 클래스 170-179 (0) | 2023.08.22 |