전체 글 111

Design Pattern 디자인 패턴 Iterator Pattern 이터레이터 패턴

Iterator Pattern 이터레이터 패턴 행동패턴으로, 콜랙션(리스트,맵 등)의 기본 표현을 노출하지 않고 요소에 순차적으로 접근해야 할 때 사용하는 패턴입니다. Iterator Pattern 이터레이터 패턴이 적합한 경우 콜랙션이 복합한 데이터 구조를 가지고 있지만, 고객에게 그 복잡함을 보여주고 싶지 않은 경우 데이터 구조가 복합하더라고 이터레이터를 이용해서 고객이 순차적으로 값에 접근하게 할 수 있습니다. (ex, HashMap, HashSet) 순회 코드의 중복을 줄이고 싶은 경우 사전에 데이터 구조가 알려지지 않은 경우, 기존 코드가 다양한 데이터 구조를 순환할 수 있도록 하고 싶은 경우 장단점 장점 다양한 데이터 순회 알고리즘을 코드를 분리할 수 있습니다.(단일책임원칙) 기존 코드를 수정..

JAVA/DesignPattern 2021.12.23

Design Pattern 디자인 패턴 Command Pattern 커맨드 패턴

Command Pattern 커맨드 패턴 행동 패턴으로, 요청을 커맨드 객체로 감싸서, 요청 객체에게 전달합니다. 요청 객체는 요청(명령)을 처리할 적잘한 객체를 찾아 명령을 전달합니다. Command Pattern 커맨드 패턴이 적합한 경우 객체의 작업을 파라미터화 하고 싶을 때 객체의 작업을 queue로 관리하고 싶을때 (작업을 스케쥴링하고 싶을 때) 되돌릴 수 있는 작업을 구현하고 싶을 때 (Redo, Undo) 작업의 이력을 STACK 방식으로 기록해두고 사용할 수 있습니다. 작업을 되돌리고 싶을 때, 현재 상태에 지정된 되돌리는 작업 (reverseOperation)을 수행하면 됩니다. Memento Pattern 장단점 장점 작업 요청과 수행을 분리할 수 있습니다. (단일책임원칙) 기존 코드를..

JAVA/DesignPattern 2021.12.22

Design Pattern 디자인 패턴 Chain of Responsibility Pattern 책임체인패턴

Chain of Responsibility Pattern 책임체인패턴 행동패턴으로, 요청을 받아 수행할 객체들을 엮어내는 패턴입니다. 요청의 타입에 따라, 각 객체가 요청을 수행할 것인지, 다음 객체로 넘겨줄 것인지를 판단합니다. 책임체인 패턴이 적합한 경우 요청의 경우의 수에 따라 다른 종류의 작업이 진행되어야 하는 경우, 단 요청의 타입을 정의할 수 있고, 실행 순서를 미리 알 수 없는 경우 정의된 순서에 따라 몇개의 작업이 진행되어야만 하는 경우 런타임 시점에 작업의 순서나 작업 그룹을 정의해야 하는 경우 장단점 장점 요청의 처리 순서를 결정할 수 있습니다. 작업을 요청하는 클래스와 작업을 수행하는 클래스를 분리할 수 있습니다. (단일책임원칙) 기존의 요청 코드(client code)를 수정하지 않..

JAVA/DesignPattern 2021.12.21

Design Pattern 디자인 패턴 Proxy Pattern 프록시 패턴

Proxy Pattern 프록시 패턴 구조패턴으로 프록시 패턴은 다른 클래스의 기능을 대신하는 클래스입니다. 프록시 객체는 외부에서 원래 객체의 기능을 사용할 수 있는 인터페이스 역할을 합니다. 또한 프록시 객체에서 원래 객체의 기능을 사용하기 전후에 로직을 추가할 수도 있습니다. Proxy의 종류 Virtual Proxy (가상 프록시) : 객체가 필요할 때 생성하기 / 지연 생성(초기화) 가끔 필요한 객체인데, 항상 메모리에 생성되어 있어서 시스템 자원 낭비가 있는 경우에 사용합니다. 프로그램이 실행될때 객체를 생성하지 않고, 객체가 필요해졌을 때 생성합니다. Protection Proxy(보호 프록시) : 접근 제한 지정된 고객만이 서비스 객체에 접근할 수 있도록 접근 제한을 해야할 때 사용합니다...

JAVA/DesignPattern 2021.12.20

Design Pattern 디자인 패턴 Flyweight Pattern 플라이웨이트 패턴

FlyWeight Pattern 플라이웨이트 패턴 구조 패턴으로, 객체마다 모든 데이터를 저장하지 않고 공통된 부분은 공유할 수 있도록 해주는 패턴입니다. 주로 객체 생성 횟수를 줄이고, 메모리 사용량을 줄이고 성능을 개선하기 위해 사용합니다. flyweight 객체가 생성된 객체의 목록을 관리합니다. 비슷한 종류의 객체가 있다면 재사용하고, 없으면 새로 생성합니다. 예를 들어 객체 목록을 HashMap으로 가지고 있으면서, 동일한(비슷한) 객체가 있다면 그 객체를 재사용(get)하고 없으면 새로 생성 (put) 합니다. 장단점 장점 RAM 메모리를 관리할 수 있습니다. 단점 flyweight의 메소드를 호출할때마다 데이터가 계산되어야 하는 경우, RAM의 작동량이 CPU 사이클을 넘어설 수도 있습니다...

JAVA/DesignPattern 2021.12.19

Design Pattern 디자인 패턴 Facade Pattern 파사드 패턴

Facade Pattern 파사드 패턴 구조 패턴으로 시스템의 복잡한 구성을 숨기면서 퍼블릭 인터페이스(메소드)를 통해 시스템의 기능에 접근할 수 있도록 하는 패턴입니다. 고객이 직접 시스템의 각 객체에 접근해서 사용하는 것이 아니라, 메소드를 추려서 간단한 인터페이스를 제공하는 파사드 객체를 이용해 시스템의 기능을 사용합니다. 장단점 장점 시스템의 복잡함에서 코드를 분리할 수 있습니다. 단점 Facade가 모든 객체가 결합된, 최상위 객체( a God Object)가 될 수도 있습니다. Facade Pattern 파사드 패턴 구현 도형 public interface 도형 { } 세모 public class 세모 implements 도형 { public 세모() { System.out.println("세..

JAVA/DesignPattern 2021.12.18

Design Pattern 디자인 패턴 Decorator Pattern 데코레이터 패턴

Decorator Pattern 데코레이터 패턴 구조 패턴으로, 행동을 가진 객체를 둘러싸는 특별한 래퍼(Wrapper)를 통해 객체에 새로운 행동을 추가할 수 있도록 해주는 패턴입니다. 장단점 장점 서브클래스를 새로 만들지 않도고 새로운 메소드를 추가할 수 있습니다. 런타임에 객체에 대한 책임을 추가하고 삭제할 수 있습니다. 여러 개의 메소드를 합칠 수 있습니다. (단일책임원칙) 다양한 동작을 가진 단일 클래스를 여러개의 서브 클래스로 분리할 수 있습니다. 단점 Decorator가 중첩(스택 구조)되어 있는 경우, Decorator 하나를 삭제하기 어렵습니다. Decorator가 순서 없이 중첩되어 있는 경우, Decorator 하나를 추가하기 어렵습니다. 여러 층의 초기 구성 코드가 보기 좋지 않을 ..

JAVA/DesignPattern 2021.12.18

Design Pattern 디자인 패턴 Composite Pattern 컴포지트 패턴

Composite Pattern 컴포지트 패턴 컴포지트 패턴은 구조 패턴으로, 객체를 트리 구조로 관리할 수 있도록 해줍니다. 구성요소 Component : Client가 Leaf와 Composite에게 접근할 수 있도록 해주는 인터페이스 Leaf : 내부에 다른 클래스 요소를 포함하지 않는, 가장 밑 계층 요소 Composite : 내부에 다른 클래스 요소를 포함하고 있는 요소. (leaf를 포함하고 있는 요소) Client : Component를 통해 외부에서 메세지를 요청하는 객체. 장단점 장점 복잡한 트리 구조의 클래스들을 편하게 관리할 수 있습니다. (다형성과 재귀) 기존의 코드를 수정하지 않고도 구조에 포함되는 새로운 클래스를 추가할 수 있습니다. (개방/폐쇄원칙) 단점 기능이 많은 클래스를 ..

JAVA/DesignPattern 2021.12.18

Design Pattern 디자인 패턴 Bridge Pattern 브릿지 패턴

Bridge Pattern 브릿지 패턴 구조 패턴인 브릿지 패턴은 추상화된(abstraction) 객체들과 구현(implementation)된 객체를 연결하는 데 사용되는 패턴입니다. 추상화된 객체가 인터페이스 구현 객체를 포함하도록 해서, 2개의 개념을 합칠 수 있는 형태를 말합니다. Bridge Pattern 브릿지 패턴의 장단점 장점 플랫폼에서 독립적인 클래스를 생성할 수 있습니다. 클라이언트가 높은 수준의 추상화된 객체에 접근하기 때문에 객체의 새부정보가 노출되지 않습니다. 새로운 추상화 객체와 구현 객체을 독립적으로 생성할 수 있습니다. (개방폐쇄원칙) 높은 수준의 추상화 객체와 인터페이스를 구현한 세부 클래스에만 집중할 수 있습니다. (단일책임원칙) 단점 높은 응집도를 갖게 되어 코드가 복잡해..

JAVA/DesignPattern 2021.12.16

Design Pattern 디자인패턴 Adapter Pattern 어답터 패턴

Adapter Pattern 어답터 패턴 어답터 패턴은 서로 다른 인터페이스를 바꿔치기 할 수 있도록 해주는 패턴입니다. 예를 들어 5핀 충전기에 어답터를 끼우면 C type 기기를 충전할 수 있는 것과 같은 원리입니다. Adapter Pattern 어답터 패턴의 장단점 장점 비즈니스 로직에서 인터페이스 및 데이터 변환 로직을 분리할 수 있습니다. (단일책임원칙) 기존 클래스 코드를 변경하지 않고도 새로운 이터 형태로 변환할 수 있습니다. (개방폐쇄원칙) 단점 코드의 복잡성이 증가할 수 있습니다. (새로운 클래스가 생성될 경우, 어답터와 인터페이스를 함께 도입해야 하기 때문에 때로는 클래스 자체를 변경하는 것이 더 간단할 수도 있습니다.) Adapter Pattern 어답터 패턴 구현 어답터 클래스는 인..

JAVA/DesignPattern 2021.12.16