본문 바로가기

Design Pattern

(5)
[DesignPattern] 전략 패턴(Strategy Pattern) 1. 전략 패턴이란? 전략 패턴은 실행 중에 알고리즘을 선택할 수 있게 하는 행위 소프트웨어 디자인 패턴이다. - 위키 백과 동일 계열의 알고리즘군을 정의하고, 각 알고리즘을 캡슐화하며, 이들을 상호교환이 가능하도록 만든다. 알고리즘을 사용하는 클라이언트와 상관없이 독립적으로 알고리즘을 다양하게 변경할 수 있게 한다. - GoF 특정 기능이 추가될 때, 전략 객체를 생성 후 주입하는 방식으로 유연하게 기능을 확장할 수 있습니다. 2. 예제 소스 1) Strategy 인터페이스 및 Strategy 클래스 //전략 인터페이스 public interface PrintStrategy { public void print(); } //프린터로 전달하는 전략 public class PrinterStrategy imp..
[Design Pattern] 추상 팩토리 패턴(Abstract factory pattern) 팩토리 메소드 패턴 객체의 생성을 팩토리 클래스로 위임하여 객체를 생성하는 패턴 추상 팩토리 패턴 팩토리를 추상화해서 관련있는 객체의 집합을 생성할 수 있는 팩토리를 만들고 조건에 따라 팩토리를 생성해서 서로 관련된 객체를 생성하는 패턴 JAVA 소스 예제 public abstract class Phone { public abstract void power(); } public class SamsungPhone extends Phone { @Override public void power() { System.out.println("samsung phone power on"); } } public class ApplePhone extends Phone { @Override public void power(..
[디자인 패턴] 팩토리 메소드 패턴 1. 팩토리 메소드 패턴이란? 객체를 생성하기 위한 인터페이스를 정의하고, 어떤 클래스의 인스턴스를 생성할지에 대한 처리는 서브클래스가 결정하는 디자인 패턴 - GoF 2. 팩토리 메소드 패턴을 사용하는 이유 팩토리 메소드 패턴을 사용하는 이유는 클래스의 생성과 사용의 처리로직을 분리하여 결합도를 낮추기 위한 것 입니다. 결합도는 간단히 말해서 클래스의 처리 로직에 대한 변경점이 생겼을 때 얼마나 사이드 이펙트를 주는가 인데, 팩토리 메소드 패턴을 사용할 경우 직접 객체를 생성해 사용하는 것을 방지하고 서브 클래스에 생성 로직을 위임함으로써 보다 효율적인 코드 제어를 할 수 있고 의존성을 제거 합니다. 3. 팩토리 메소드 패턴 예제 1) 음료수의 추상 클래스 public abstract class Dri..
[디자인 패턴] 템플릿 메소드 패턴(Template Method Pattern) 1. 템플릿 메소드 패턴이란? 알고리즘의 구조를 메소드에 정의하고, 하위 클래스에서 알고리즘 구조의 변경없이 알고리즘을 재정의 하는 패턴이다. 알고리즘이 단계별로 나누어 지거나, 같은 역할을 하는 메소드이지만 여러곳에서 다른형태로 사용이 필요한 경우 유용한 패턴이다. - GoF Design Patterns 참조 : https://yaboong.github.io/design-pattern/2018/09/27/template-method-pattern/ 템플릿 메소드 패턴은 알고리즘의 흐름이 정해져 있지만, 특정 부분은 필요에 따라 변경해야 할 때, 사용합니다. 2. 템플릿 메소드 패턴 예제 1) Template.java public abstract class Template { final public vo..
[디자인 패턴] 프록시 패턴 (Proxy Pattern) 1. 프록시 패턴이란? 실제 객체를 바로 이용하는 것 대신 가상 객체에 실제 객체를 선언하여 실제 객체의 기능과 추가적인 기능을 사용함으로 써 기능의 흐름을 제어하는 디자인 패턴입니다. 2. 프록시 패턴 장점 1) 실제 객체를 수행하기 전에 전처리를 하거나 기본 객체를 캐싱할 수 있다. 2) 실제 객체를 수정하지 않고 추가적인 기능을 삽입할 수 있다. 3. 프록시 패턴 예제 1) MainSender.java public interface MailSender { public void send(String message); } 2) RealMailSender.java public class RealMailSender implements MailSender { @Override public void send(..