목록객체지향설계 (6)
제리의 배움 기록
Business Delegate Pattern 목적 Presentation(view, client) 계층과 비즈니스 계층의 결합을 줄이기 위한 패턴 클라이언트는 비즈니스 구현을 직접 참조하지 않고 주입받은 delegate를 통해 비즈니스를 호출 비즈니스 서비스를 인터페이스로 추상화하여 조건에 따라 다른 구현체를 생성 아래와 같은 구조에서는 Client가 특정 비즈니스 구현체를 직접 참조합니다. business delegate pattern을 적용하면 delegate를 통해서 비즈니스계층에 접근하므로 결합도가 낮아지고 자연스럽게 관심사를 분리할 수 있게 됩니다. Session Facade Pattern 목적 클라이언트가 비즈니스 계층의 컴포넌트들을 직접 참조하고 조작하는 대신 앞단에 단일 창구 역할을 하는..
팩토리 메서드 패턴 (Factory method pattern) 팩토리 메서드 패턴은 클라이언트가 특정 객체의 생성을 직접 생성하지 않고 "팩토리" 역할을 하는 객체에 위임하는 패턴입니다. 팩토리는 인터페이스로 추상화되어 구체 팩토리의 변경을 유연하게 합니다 구체 팩토리는 추상화된 객체를 생성합니다. 이는 클라이언트와의 결합을 낮추고, 생성 객체의 확장성과 변경 용이를 보장합니다. 클라이언트는 결과적으로 어떤 객체가 생성될 것인지 알 필요가 없는 것이 특징입니다. 팩토리 메서드 패턴 예제 클래스 다이어그램 Client가 생성하고자 하는 BenzCar와 VolkswagenCar를 Car 클래스로 추상화 Client에서 Car를 직접 생성하지 않고 CarFactory를 통해서 생성 코드 CarFactory ..
어답터 패턴은 2가지 세부 패턴으로 나눌수 있습니다. 1. object adapter pattern Client에서 사용하고자 하는 대상이 되는 Adaptee 클래스를 직접 참조하지 않고 Adapter 클래스를 이용해 간접 참조 Adapter와 Adaptee의 관계가 composition 관계 2. class adapter pattern Adpater 클래스에서 Target 인터페이스로 추상화함과 동시에 Adaptee 클래스를 상속받아 사용 Adpater와 Adaptee의 관계가 composition이 아닌 상속 관계로 이루어져있기 때문에, Adapter는 특정 Adaptee에 종속됨. 어답터 패턴의 장점과 단점 장점 1)메인 비즈니스 로직에서 특정한 기능을 분리하거나 2)서드 파티 라이브러리를 참조할때..
MVC(Model-View-Controller) MVC 패턴은 Model-View-Controller로 구분되는 디자인 패턴입니다. MVC 이전 초기 웹 프로그래밍에서는 하나의 소스코드에 뷰와 비즈니스 로직이 혼재되어 있었습니다. 빠르게 개발할 수 있는 장점이 있었지만 하나의 페이지에서 제공하는 기능이 많아지거나 기존 요구사항이 변경되는 등의 변화가 발생하면 유지보수가 어려워지는 문제가 있었습니다. MVC 패턴은 시스템의 결합을 느슨하게 하여 보다 객체지향적인 프로그래밍을 가능하게 하였고 유지보수성이 향상된 설계를 제시합니다. 1)비즈니스 로직을 처리하고 2)데이터 결과값을 읽어와 3)View로 제공하는 절차지향적이었던 과정을, MVC에서는 관심사의 분리 원칙으로 각각을 독립적인 모듈로 나눕니다. Mod..
객체지향 설계의 5원칙 - SOLID SRP(Single Responsibility Principle) 단일 책임 원칙 하나의 클래스는 하나의 책임만 가져야 한다. OCP(Open-Closed Principle) 개방/폐쇄의 원칙 하나의 역할 단위는 확장에는 열려 있어야 하고 변경에 대해서는 닫혀 있어야 한다. LSP(Liskov Substitution Principle) 리스코프 치환 원칙 상위 클래스는 하위 클래스로 치환될 수 있어야 한다. ISP(Interface Segregtion Principle) 인터페이스 분리 원칙 클라이언트는 사용하지 않는 매서드에 의존하지 않아야 한다. DIP(Dependency Inversion Principle) 의존관계 역전 원칙 상위 계층 모듈은 하위 계층 모듈의..
Prefer composition over inheritance 상속보단 조합을 사용하라 여기에서 말하는 상속은 클래스가 다른 클래스를 확장하는 구현상속만을 말합니다. 상속(inheritance) : is kind of 관계 상속이란 상위클래스를 확장할 목적으로 하위클래스를 정의하는 것입니다. 상속은 올바르게 사용하면 코드를 재사용하고 하위클래스들을 추상화하여 다룰수 있는 강력한 수단이입니다. 하지만, 상위 클래스에 매소드 변경이나 추가가 발생하면 하위클래스에 예기치 못한 영향을 전파할 수 있습니다.(강한 결합) 그래서 상속은 하위 클래스가 상위 클래스의 1)기능과 속성을 모두 제공하고 2)특성 왜곡하거나 제약하지 않으면서 3)확장된 기능을 제공할수 있는 것이 명확한 경우에만 사용해야 합니다. => 이것..