Design Pattern/구조 패턴

    Proxy pattern

    Proxy pattern 프록시 패턴은 어떤 객체에 대한 접근을 제어하는 용도로 대리인이나 대변인에 해당하는 객체를 제공하는 패턴입니다. 일반적으로 프록시는 다른 무언가와 이어지는 인터페이스의 역할을 하는 클래스이다. 프록시는 어떠한 것(이를테면 네트워크 연결, 메모리 안의 커다란 객체, 파일, 또 복제할 수 없거나 수요가 많은 리소스)과도 인터페이스의 역할을 수행할 수 있다. 기본 객체가 리소스 집약적인 경우. 자잘한 작업들은 프록시 객체가 처리하게 한다. 기본 객체에 접근을 제어해야하는 경우. 프록시 객체가 권한에 따라 접근 로직을 다르게 처리하게 한다. 실제로 Spring의 AOP는 Proxy 패턴을 통해서 적용 지점을 지정하고 앞 뒤로 횡단 공통 관심사를 처리하는 하고 있습니다. 프록시 패턴 장점..

    Facade Pattern

    어떤 서브시스템의 일련의 인터페이스에 대한 통합된 인터페이스를 제공한다. 퍼사드에서 고수준 인터페이스를 정의하기 때문에 서브시스템을 더 쉽게 사용할 수 있다. Clent는 Facade 하나만 알고 있으면 수많은 subsystem class들을 사용할 수 있다. 컴퓨터를 작동시키기 위해 우리는 단순히 전원버튼만을 누르지만 이것도 퍼사드 패턴의 예 사용자는 버튼 하나의 클릭 만으로 컴퓨터를 실행 시키지만 컴퓨터 내부에서는 다양한 동작을 통해서 부팅하게 된다. 아래의 예에서는 부팅 과정을 간략화 하였습니다. 1. 서브시스템 클래스 public class CPU { public void freeze() { System.out.println("freeze"); } public void jump() { System..

    Decorator Pattern

    Decorator Pattern 란 객체의 결합을 통해 기능을 동적으로 유연하게 확장 할 수 있게 해주는 패턴 기본 기능에 추가할 수 있는 기능의 종류가 많은 경우에 각 추가 기능을 Decorator 클래스로 정의 한 후 필요한 Decorator 객체를 조합하여 사용하는 방식 구조 Component ConcreteComponent 과 Decorator 가 구현할 인터페이스다. 두 객체를 동등하게 다루기 위해 존재함 ConcreteComponent 기능 추가를 받을 기본 객체 Decorator 기능 추가를 할 객체는 이 객체를 상속받는다. ConcreteDecorator Decorator 를 상속받아 구현할 다양한 기능 객체이다. 이 기능들은 ConcreteComponent 에 추가되기 위해 만들어 진다...

    Composite Pattern

    컴포지트 패턴(Composite pattern)이란 객체들의 관계를 트리 구조로 구성하여 부분-전체 계층을 표현하는 패턴으로, 사용자가 단일 객체와 복합 객체 모두 동일하게 다루도록 한다. 객체 그룹과 하나의 객체가 동일한 행위를 할때 적용, 트리구조를 생성할 때 사용될 수 있다. 예시는 파일 시스템으로 1. Component Node라는 Component를 구성합니다. (equals와 hashcode는 Directory에서 remove시 객체의 내용이 같다면 삭제 되도록 하기 위해서 재정의 하였습니다.) import java.util.Objects; public abstract class Node { private String name; public Node(String name) { this.name..

    Bridge Pattern

    브리지 패턴(Bridge pattern)이란 구현부에서 추상층을 분리하여 각자 독립적으로 변형할 수 있게 하는 패턴이다. Abstraction 기능 계층의 최상위 클래스. 구현 부분에 해당하는 클래스를 인스턴스를 가지고 해당 인스턴스를 통해 구현 부분의 메서드를 호출합니다. RefindAbstraction 기능 계층에서 새로운 부분을 확장한 클래스 Implementor Abstraction의 기능을 구현하기 위한 인터페이스 ConcreteImplementor 실제 기능을 구현합니다. 기존에 참조하여 연습하는 사이트의 예시가 별로여서 검색후 적절한 예시를 가져왔씁니다. 위의 그림과 같이 인터페이스와 구현 모두에 인터페이스 계층 구조가 있다고 가정해보겠습니다. Shape의 구현체인 Triangle, Pent..

    Adapter pattern

    한 클래스의 인터페이스를 클라이언트에서 사용하고자하는 다른 인터페이스로 변환한다. 어댑터를 이용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있다. Mp3 지원하는 AudioPlater에서 Mp4와 Vlc를 지원하는 AdvancedMediaPlayer를 어댑터 패턴을 통해서 사용하는 것으로 AudioPlater의 play 메서드 실행시 Vlc, Mp4의 따라서 AdvancedMediaPlayer의 playVlc, playMp4 메서드가 실행되도록 하는 것이다. AdvancedMediaPlayer 모듈 public interface MediaPlayer { public void play(String audioType, String fileName); } public int..