본문 바로가기

IT/디자인 패턴

(8)
[DesignPattern] 전략 패턴(Strategy Pattern) 1. 전략 패턴이란? 전략 패턴은 실행 중에 알고리즘을 선택할 수 있게 하는 행위 소프트웨어 디자인 패턴이다. - 위키 백과 동일 계열의 알고리즘군을 정의하고, 각 알고리즘을 캡슐화하며, 이들을 상호교환이 가능하도록 만든다. 알고리즘을 사용하는 클라이언트와 상관없이 독립적으로 알고리즘을 다양하게 변경할 수 있게 한다. - GoF 특정 기능이 추가될 때, 전략 객체를 생성 후 주입하는 방식으로 유연하게 기능을 확장할 수 있습니다. 2. 예제 소스 1) Strategy 인터페이스 및 Strategy 클래스 //전략 인터페이스 public interface PrintStrategy { public void print(); } //프린터로 전달하는 전략 public class PrinterStrategy imp..
[Design Pattern] 데코레이터 패턴 (Decorator Pattern) 1. 데코레이터 패턴이란? 기본 기능 객체와 부가 기능 객체를 결합해서 동적으로 기능을 확장할 수 있게 해주는 패턴 2. 데코레이터 패턴의 특징 1) 구조 패턴 클래스나 객체를 조합해서 더 큰 구조를 만드는 패턴 2) 합성 관계 생성자에서 필드의 객체를 생성하는 경우, 필드 객체의 라이프 사이클은 전체 객체에 의존적이게 된다. 3. 프록시 패턴과 데코레이터 패턴의 비교 프록시 패턴 제어의 흐름을 변경하거나 별도의 로직 처리를 목적으로한다. 특별한 경우가 아니라면 반환값을 변경하지 않는다. 데코레이터 패턴 데코레이터를 추가할수록 추상 메소드에 기능이 많아진다 4. 언제 사용하는가? 1) 기본 기능 객체의 기능을 그대로 유지하면서 새로운 기능을 동적으로 추가할 때 사용한다. 2) 탈부착 가능한 책임을 정의할..
[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(..
[디자인 패턴] 컴포지트 패턴(Composite pattern) 1. Composite pattern이란? 단일 객체나 복수 객체의 타입을 동일하게 취급하는 패턴입니다. 즉, 단일 객체와 복합 객체의 처리방법이 차이가 없을 경우 사용합니다. 2. Composite pattern 예제 Composite pattern이 적용된 파일 시스템을 간단하게 구현해보겠습니다. 1) Node.java public interface Node { public String getName(); default public List getNodes() { return null; } } Node는 표현할 요소들의 추상적인 인터페이스 역할을 합니다. 2) File.java public class File implements Node { private String name; public File(..
MVVM 패턴이란? 1. MVVM 패턴이란 MVVM 패턴은 페이지를 Model, View, ViewModel 단위로 분리해서 단위 별로 의존성을 줄이고, 화면 처리에 초점을 맞춘 개발 패턴입니다. 2. View 화면을 그리는 레이아웃을 의미합니다. (HTML, XML 등..) View는 리스트나 상세 페이지 등 동적으로 데이터가 변경되는 부분에 View Model과 Data Binding하는 코드를 삽입합니다. 그리고 View Model를 감시하다가 상태 변화가 전달되면 화면을 갱신합니다. View는 화면을 표현하는데 집중하고, 별도의 서비스 로직은 View Model를 통해 수행합니다. 3. View Model View에 연결할 데이터(Model)와 명령(Command)으로 구성되어 있으며, Model로 부터 변경알림을 ..