Programming/Clean Architecture12 11장. DIP: 의존성 역전 원칙 의존성 역전 원칙 의존성 역전 원칙에서 말하는 '유연성이 극대화된 시스템'은 소스코드 의존성이 추상에 의존하며 구체에는 의존하지 않는 시스템이다. 자바와 같은 정적 타입 언어에서 이는 use, import, include 구문은 오직 인터페이스나 추상 클래스 같은 추상적인 선언만을 참조해야 한다는 뜻이다. 그러나 이를 무조건적 규칙으로 따르기는 어렵다. 예를 들어 String과 같은 구체 클래스에 의존하지 않고 이를 억지로 추상화 하는 것은 현실성이 없다. 따라서 의존성 역전 원칙을 논할 때 운영체제나 플랫폼 같이 안정성이 보장된 환경에 대해서는 무시하는 편이다. 우리가 의존하지 않고자 하는 것은 변동성이 큰 구체적인 요소다. 이 구체적인 요소는 우리가 개발을 하는 동안 자주 변경될 수밖에 없는 모듈들이.. 2023. 12. 11. 10장. ISP: 인터페이스 분리 원칙 인터페이스 분리 원칙 아래와 같은 UserAction 클래스와 이에 의존하는 클래스 Admin, NormalUser, PremiumUser가 있다고 해보자. public class UserAction { void adminAction(){ doSomething... } void normalUserAction(){ doSomething... } void premiumUserAction(){ doSomething... } } Admin은 나머지 기능은 사용하지 않지만, 해당 기능들에도 의존하게 된다. 만일 UserAction에서 normal, premium기능이 수정되면 Admin도 컴파일과 배포를 다시 진행해야한다. public interface AdminAction{ void adminAction(); .. 2023. 12. 11. 9장. LSP: 리스코프 치환 원칙 리스코프 치환 원칙 S 타입의 객체 o1 각각에 대응하는 T 타입 객체 o2가 있고, T 타입을 이용해서 정의한 모든 프로그램 P에서 o2의 자리에 o1을 치환하더라도 P의 행위가 변하지 않는다면, S는 T의 하위타입이다. 뭔 소리야 쉽게 설명하면 다음과 같다. 프로그램 P에서 상위 타입 객체 T를 사용하고 있다면, T를 T의 하위타입 객체인 S로 대체해도 제대로 프로그램이 돌아가야한다. 상속을 사용하도록 가이드하기 알림 전송 애플리케이션을 사용한다고 해보자. 애플리케이션에서는 Notifier 객체를 사용한다. 그런데, 카카오톡으로 알림을 보내야 할 때도 있고, 이메일로 보내야 할 때도 있고, 문자로 보내야 할 때도 있다. 이 때, KakaoNotifier, EmailNotifier, SMSNotifie.. 2023. 11. 29. 8장. OCP: 개방 - 폐쇄 원칙 개방 - 폐쇄 원칙 소프트웨어 개체는 확장에는 열려 있어야 하고, 변경에는 닫혀 있어야 한다. 즉, 소프트웨어 개체의 행위는 확장할 수 있어야 하지만, 이때 개체를 변경해서는 안된다. 사고 실험 보고서를 웹 페이지로 표시하는 프로그램에, 보고서를 프린트하는 기능을 추가한다고 해보자. 소프트웨어 아키텍처가 훌륭하다면 기존 코드의 수정량은 거의 없을 것이다. 서로 다른 목적으로 변경되는 요소를 적절히 분리(SRP)하고, 이들 요소 사이의 의존성을 체계화(DIP)하면 변경량의 최소화가 가능하다. 단일 책임 원칙에 따라 위의 과정을 책임으로 나눠보자. 주어진 데이터를 분석하고 계산한다. 계산된 데이터로 웹 페이지용 보고서를 만들거나, 프린트용 보고서를 만든다. 우리는 보고서 생성이라는 하나의 과정이 두 개의 책.. 2023. 11. 21. 7장. SRP: 단일 책임 원칙 SRP에 대한 가장 흔한 오해는 하나의 모듈은 하나의 일만 해야한다는 것이다. 그러나 SRP의 정확한 의미는 '단일 모듈은 변경의 이유가 오직 하나뿐이어야 한다'는 것이다. 여기서 말하는 변경의 이유는 사용자와 이해관계자를 가리킨다. 다시 사용자와 이해관계자는 해당 변경을 요청하는 집단을 의미한다. 결국 SRP의 의미는 '하나의 모듈은 오직 하나의 액터에 대해서만 책임져야 한다'는 것이다. 이 때 모듈은 단순히 함수와 데이터 구조로 구성된 응집된 집합이다. 이는 클래스가 될 수도, 패키지가 될 수도, 정말 하나의 모듈이 될 수도 있다. '응집된' 이라는 표현이 SRP를 암시한다. 단일 액터를 책임지는 코드를 하나로 묶어주는 힘이 바로 응집성이다. SRP를 위반하는 징후 1 : 우발적 중복 영화의 스태프 .. 2023. 11. 13. 이전 1 2 3 다음 반응형