디자인패턴

Template Callback? 템플릿 콜백 패턴의 경우 전략패턴의 변형적인 패턴입니다 Strategy(전략) 패턴의 설명은 제 게시글에 나와 있으니 참고해주세요 ^-^ 그림으로 보는게 참 어렵죠? 단순히 설명하자면, 템플릿 콜백 패턴은 전략 패턴에 익명 클래스(또는 함수)를 더해서 사용하는 방식입니다 Java8에 나온 익명함수(lamba)를 사용해서 Interface만 구현한 채, 실제 로직을 구현하는 방식이죠! 그렇기 때문에, 이 패턴은 Spring에서 DI(Dependency Injection) 의존성 주입과 매우 유사합니다. Spring을 개발하시다 보면 이러한 의존성 주입이 매우매우 자주 일어나는 것을 확인할 수 있는데, 그래서 Spring 개발할 때 많이 쓰이는 패턴중에 하나입니다! 전략 패..
What is 데코레이터? - 데코레이터 패턴 : 주어진 상황 및 용도에 따라 어떤 객체에 책임을 덧붙이는 패턴, 기능 확장이 필요할 때 서브클래싱 대신 쓸 수 있는 유연한 대안이다 이게 무슨 말일까요? 우리가 기능을 확장할 때 다양한 방법으로 확장할 수 있는데, 객체지향적인 언어에서는 상속을 통해서 기능을 확장할 수가 있어요 하지만 필연적인 상속이 정말 좋은 방법일까요? 상속은 객체지향을 위한 강력한 무기지만, 동시의 부모클래스와의 강력한 의존성을 가지게 되죠 이러한 상속을 대신하여 해결할 수 있는 방법은 다른 클래스에 합성시키는 것입니다 다이어그램을 보면서 말씀드릴게요~! Component라는 구성요소 클래스가 있죠? Decorator클래스는 Component를 상속함과 동시에 합성을 하여 멤버변수로..
What is 프록시 패턴? - 프록시 패턴은 다른 무언가와 이어지는 인터페이스의 역할을 하는 패턴입니다 한마디로 무언가를 대신해주는 대리자 입니다 또 너무나 어렵죠? 본래는 Proxy라는 객체가 해야될 일을 RealSubject 객체에게 의존성 주입(합성) 시킴으로써 메서드(메시지) 실행에 대한 책임을 RealSubject에게 넘기는 방식입니다 그렇게 되면 Proxy라는 객체는 외부에게 메서드를 노출하지 않고, 해당 로직대로 흐름을 제어할 수 있습니다 Why 프록시? 왜 쓸까요? 왜 굳이 숨길까요? 왜 합성시킴으로써 다른 사람에게 위임하는 걸까요? 프록시 패턴은 실제 세계와 아주 밀접하게 연관되어 있습니다 우리가 흔히 가게에서 결제하는 체크카드를 예로 들어볼까요? 체크카드로 결제를 하게 되면, 체크카드..
브릿지 패턴? 구현부에서 추상층을 분리하여 각자 독립적으로 변형할 수 있게 하는 패턴이다 또 무슨 말인지 어렵네요 우선 UML 클래스와 함께 살펴볼게요~! Abstraction : Implementor를 인스턴스 변수로 합성된 상태이고, function이 추상화된 상태 Implementor : 추상화된 인터페이스 ConcreteImplementor : 인터페이스(Implementor)를 구체화한 객체 = 상속 받아서 구현 RefinedAbstraction : 추상화 클래스(Abstraction)를 구체화한 객체 한마디로, Abstraction 클래스는 Implementor에 의존되어 있는 상태고, 이 의존되어 있는 상태를 추상화하여 실제 구현은 자식 클래스(RefinedAbstraction)에 맡기는 전..
Command Pattern? - 커맨드 패턴(Command Pattern)은 Client가 보낸 요청을 객체로 캡슐화하여 이를 나중에 이용할 수 있도록 필요한 정보를 저장, 로깅, 취소할 수 있게 하는 패턴입니다. * 한마디로, 요청을 객체로 감싸서 관리하겠다는 말입니다 * 예시를 통해서 한번 이해해볼까요? 리모컨을 디자인 해달라는 의뢰를 받았습니다. 리모컨에서는 여러 기능들이 있겠죠. 에어컨을 키거나, 선풍기를 키거나, 음악 플레이어를 재생하거나 등 여러 가지 기능이 있습니다. 하지만 리모컨의 입장에서는 내가 무엇을 수행해야하는지 알 필요가 있을까요? 그저 어떤 버튼을 눌렀고, 어떻게 실행될지 알기만 하면 됩니다. 그렇게 되면 정보의 은닉(캡슐화)이 가능해집니다! 구성 요소 - 커맨드 패턴에서는 다음..
Adapter Pattern? - 어댑터 패턴 : 서로 간의 호환성이 없는 인터페이스를 함께 동작할 수 있게 해주는 디자인 패턴 예를 들어, Ethernet Port와 USB Port가 있다고 가정해보자! 둘간의 Port는 절대로 같이 연결할 수 없다. 하지만, 중간고리 역할(Adapter)이 있다면 둘 간의 연결은 가능해진다! Why Adpater? 그럼 어떨 때 Adapter 패턴을 적용하고, 왜 써야 할까? Client는 Target 인터페이스만 알면, 실체화된 Adapter 객체가 알아서 로직을 흐르게 해준다! Adapter는 Adaptee를 이용하여 요청에 대한 결과를 반환하게 된다! Client의 입장에서 Target에서의 Adaptee의 존재를 눈치채지 못하고 숨길 수 있다! 한마디로, 엄~..
huisam
'디자인패턴' 태그의 글 목록