Design Pattern

What is 프록시 패턴? - 프록시 패턴은 다른 무언가와 이어지는 인터페이스의 역할을 하는 패턴입니다 한마디로 무언가를 대신해주는 대리자 입니다 또 너무나 어렵죠? 본래는 Proxy라는 객체가 해야될 일을 RealSubject 객체에게 의존성 주입(합성) 시킴으로써 메서드(메시지) 실행에 대한 책임을 RealSubject에게 넘기는 방식입니다 그렇게 되면 Proxy라는 객체는 외부에게 메서드를 노출하지 않고, 해당 로직대로 흐름을 제어할 수 있습니다 Why 프록시? 왜 쓸까요? 왜 굳이 숨길까요? 왜 합성시킴으로써 다른 사람에게 위임하는 걸까요? 프록시 패턴은 실제 세계와 아주 밀접하게 연관되어 있습니다 우리가 흔히 가게에서 결제하는 체크카드를 예로 들어볼까요? 체크카드로 결제를 하게 되면, 체크카드..
브릿지 패턴? 구현부에서 추상층을 분리하여 각자 독립적으로 변형할 수 있게 하는 패턴이다 또 무슨 말인지 어렵네요 우선 UML 클래스와 함께 살펴볼게요~! Abstraction : Implementor를 인스턴스 변수로 합성된 상태이고, function이 추상화된 상태 Implementor : 추상화된 인터페이스 ConcreteImplementor : 인터페이스(Implementor)를 구체화한 객체 = 상속 받아서 구현 RefinedAbstraction : 추상화 클래스(Abstraction)를 구체화한 객체 한마디로, Abstraction 클래스는 Implementor에 의존되어 있는 상태고, 이 의존되어 있는 상태를 추상화하여 실제 구현은 자식 클래스(RefinedAbstraction)에 맡기는 전..
Composite Pattern? - 단일 객체든, 객체 집합이든, 같은 방법으로 취급하여 다루는 디자인 패턴 - 트리 구조와 상당히 유사한 성격을 가지고 있다. - 클라이언트 전체와 부분을 구별하지 않고, 동일한 인터페이스로 사용한다! 구성 요소 Component : 구체적인 부분 -> 공통 Interface로 선언 Leaf : 구체적인 부분 클래스 -> Interface를 상속받은 객체 Composite : 여러 개의 Component를 가지는 객체 -> Leaf의 집합 * 정말 트리 구조와 유사하지 않나요? * 아닌거 같다면 죄송.. 실제 코드 간단하게 여러분들에게 설명하기 위해서 Code로 작성해보았어요! 우선, 가정을 하나 둘게요. Cafe라는 Domain을 지정해서 설명해볼까 해요 회사를 그만..
Adapter Pattern? - 어댑터 패턴 : 서로 간의 호환성이 없는 인터페이스를 함께 동작할 수 있게 해주는 디자인 패턴 예를 들어, Ethernet Port와 USB Port가 있다고 가정해보자! 둘간의 Port는 절대로 같이 연결할 수 없다. 하지만, 중간고리 역할(Adapter)이 있다면 둘 간의 연결은 가능해진다! Why Adpater? 그럼 어떨 때 Adapter 패턴을 적용하고, 왜 써야 할까? Client는 Target 인터페이스만 알면, 실체화된 Adapter 객체가 알아서 로직을 흐르게 해준다! Adapter는 Adaptee를 이용하여 요청에 대한 결과를 반환하게 된다! Client의 입장에서 Target에서의 Adaptee의 존재를 눈치채지 못하고 숨길 수 있다! 한마디로, 엄~..
Factory Method? - 팩토리 메서드 : 메서드의 호출에 대한 반환값으로 객체를 생산하는 디자인 패턴 너무나 간단하죠? 왜 쓸까요? 어떠한 데이터를 가지고 객체를 생산해야 되는데, 어떤 객체인지 예상이 불가능할 때! 공통 분모를 가지는 부모 클래스 혹은 추상화된 인터페이스를 데이터를 바탕으로 구성할 때! 복잡한 객체를 인스턴스화 하는 논리적인 로직을 따로 분리할 때! 사용 예시 우선은 공통 분모를 가지는 인터페이스를 만들어보았습니다! package designpattern.factorymethod; public interface Car { String getCarName(); } 1. Car 인터페이스 구현 다음으로, 현대차와 기아차를 직접 실체화하였습니다! package designpatter..
Template Method - 템플릿 메서드 패턴 : 특정 작업을 서브 클래스로 캡슐화하는데, 전체 수행 구조는 바뀌지 않으면서 특정 단계에서 수행하는 내역을 바꾸는 패턴 * 호출되는 메서드는 동일하지만, 세부적으로 호출되는 메서드를 로직을 다르게 작성함으로 코드 중복을 최소화한다! * 되게 용어가 복잡하고, 정신없지만 밑에서 정리해드리겠습니다. Why Template Method? - Template Method는 전체적인 로직을 가지고 있지만, 세부 메서드를 추상화하여 상세 로직을 유연하게 바꾸는 방식! - 따라서, 전체 흐름은 동일하게 가고 세부를 변경(코드의 중복 최소화)하는 것이 핵심이다! * 그렇게 되면, 코드의 재사용성을 높이고, 중복을 최소화하여, 객체에 따라서 논리적인 흐름을 변경하는 ..
huisam
'Design Pattern' 태그의 글 목록