Template Method Pattern
·
Programming/디자인 패턴
템플릿이란?템플릿 == 문자형 틀예를 들어, 색연필로 색칠할 때 색상은 바뀌어도 문자형은 유지되는 것처럼, 상위 클래스의 틀을 통해 기본적인 로직은 동일하게 유지템플릿 메서드 패턴이란?상위 클래스에서 처리의 뼈대를 결정하고 하위 클래스에서 그 구체적인 내용을 결정하는 패턴이다.구성(추상 클래스 + 구현 클래스)추상 클래스추상 클래스는 하위 클래스에서 구현할 것으로 기대하는 추상 메서드와 로직의 뼈대가 되는 템플릿 메서드로 구성된다.템플릿 메서드는 구체적인 로직의 순서를 정의한 일반 메서드로, 추상 메서드의 조합을 통해 알고리즘을 구성한다.템플릿 메서드 == 알고리즘Public abstract class AbstractDisplay {// 추상화 메서드(== 뼈대) public abstract vo..
데코레이터 패턴(Decorator Pattern)
·
Programming/디자인 패턴
데코레이터 패턴이란? 주어진 상황 및 용도에 따라 기본 객체에 책임(기능)을 동적으로 추가하는 패턴. 데코레이터의 예 스타벅스 기본 에스프레소에, 물, 우유, 시럽, 휘핑크림 등 개인의 선호에 따라 재료(기능)을 추가하면 다양한 음료를 재조할 수 있다. 이와 같이 하나의 객체(에스프레소)에 옵션들을 여러개 추가해서 만드는 패턴을 장식하는 것과 같다하여 데코레이터 패턴이라 한다. 데코레이터 패턴 구조 데코레이터 코드 public class Main { public static void main(String[] args) { Component espresso = new BaseComponent(); System.out.println("에스프레소 : " + espresso.add()); Component am..
컴포지트 패턴(Composition Pattern)
·
Programming/디자인 패턴
컴포지트 패턴이란? (여러 객체로 구성된 객체)복합 객체와 단일 객체를 클라이언트에서 구별 없이 다루게 해주는 패턴. 전체-부분의 관계(Directory-File)를 갖는 객체들 사이의 관계를 정의할 때 유용하다. 클라이언트는 전체와 부분을 구분하지 않고 동일한 인터페이스를 사용할 수 있다. Leaf/ Composite 클래스 모두 공통의 인터페이스의 구현체이다. Leaf: 부분 클래스, Composite 객체의 부품 Composite : 전체 클래스, 복수개의 Component를 갖는다. 심지어, 복수 개의 Leaf, 심지어 복수 개의 Composite 객체를 부분으로 가질 수 있다 패턴 적용 전 public class Computer { private Keyboard Keyboard; private ..
커맨드 패턴
·
Programming/디자인 패턴
커맨드 패턴이란? 커맨드 패턴은 객체의 행위(메소드)를 클래스로 만들어 캡슐화하는 패턴이다. 행위 패턴의 하나 행위(Behavioral) 패턴이란? - 객체나 클래스 사이의 알고리즘이나 책임 분배에 관련된 패턴 - 한 객체가 혼자 수행할 수 없는 작업을 여러 개의 객체로 어떻게 분해하는지, 또 그렇게 하면서도 객체 사이의 결합도를 최소화하는 것에 중점을 둔다. 이해를 돕기 위한 간단 예시 리모콘에는 다양한 기능을 수행하는 버튼이 있죠? 다양한 기능들을 메소드 단위로 구현할텐데, 리모콘 클래스 하나에 모두 보관해서 호출 할 수 있겠지만, 리모콘 객체가 매우 거대해질 겁니다.(한 클래스에 많은 메소드를 넣으니까 코드가 길고 복잡하겠죠? 기능을 추가하거나 수정하는데에도 번거로움이 있을 것 같아요). 하지만, ..
프록시 패턴
·
Programming/디자인 패턴
프록시 패턴 프록시 클라이언트가 사용하려고 하는 실제 대상인 것처럼 위장해서 클라이언트의 요청을 받아주는 대리자 타킷 프록시를 통해 최종적으로 요청을 위임 받아 처리하는 실제 오브젝트 프록시의 사용목적 1. 클라이언트가 타킷에 대한 접근 방법을 제어 2. 부가적인 기능을 부여하기 위함 3. 스프링에서는 AOP에 프록시 패턴 적용 AOP Aspect Oriented Programming(관전 지향 프로그래밍) 어떤 로직을 기준으로 핵심, 부가적인 관점으로 나누고 그 관점을 기준으로 모듈화하겠다. 소스 코드 상에서 반복적으로 쓰는 코드를 발견할 수 있는데, 이것을 흩어진 관심사(Crosscutting Concerns)라고 부른다. 위와 같이 흩어진 관심사를 Aspect로 모듈화하고 핵심적인 비즈니스 로직에서..