본문 바로가기

Programming/디자인 패턴7

커맨드 패턴 (Command) - 정의 - 요구사항(정보)을 객체로 캡슐화할 수 있으며 매개변수를 써서 여러 가지 다른 요구사항을 집어넣을 수도 있습니다. 또한 요청내역을 큐에 저장하거나 로그로 기록할 수 있으며 작업 취소 기능도 지원합니다. 인보커에는 execute() 메서드를 호출함으로써 커맨드 객체에게 특정 작업을 수행해달라는 요구를 하게 됩니다. Command는 모든 커맨드 객체에서 구현해야 하는 인터페이스입니다. 모든 명령은 execute() 메서드 호출을 통해 수행되며 이 메서드에서는 리시버에 특정 작업을 처리하라는 지시를 전달합니다. ConcreteCommand는 특정 행동과 리시버 사이를 연결하여 줍니다 인보커에서 execute() 호출을 통해 요청을 하면 ConcreteCommand 객체에서 리시버에 있는 메서드를 호.. 2021. 2. 9.
싱글턴 패턴 (Singleton) - 정의 - 해당 클래스의 인스턴스가 하나만 생성되고 어디서든지 그 인스턴스에 접근할 수 있도록 하기 위한 패턴 헤드퍼스트 디자인 패턴 책에서 소개해준 싱글톤 패턴에는 여러 생성 문법이 있었지만 책에서 추천하는 예시 코드입니다 1. 인스턴스를 미리 만들지 않고 필요할 때 생성하는 코드 public class Singleton { private volatile static Singleton uniqueInstance; private Singleton() {} public static Singleton getInstance() { if (uniqueInstance == null) { synchronized (Singleton.class){ if (uniqueInstance == null) { uniqueIn.. 2021. 2. 4.
팩토리 메서드 패턴 (Factory Method), 추상 팩토리 패턴 (Abstract Factory) 팩토리 메서드 패턴 (Factory Methos) - 정의 - 객체를 생성하기 위한 인터페이스를 정의합니다. 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정합니다. (구글 이미지를 참고하였습니다) 객체 생성을 담당하는 부분은 factoryMethod이 부분입니다 서브클래스에서 팩토리 메서드를 정의하여 팩토리 메서드 호출로 객체를 반환합니다. Allen Holub은 "실용주의 디자인 패턴"에서 Factory Method 패턴은 기반 클래스에 알려지지 않은 구체 클래스를 생성하는 Template Method라 할 수 있다. Factory Method의 반환 타입은 생성되어 반환되는 객체가 구현하고 있는 인터페이스이다. Factory Method는 또한 기반 클래스 코드에 구체 클래스의 이름을 감추는 방.. 2021. 2. 3.
데코레이터 패턴 (Decorator) - 정의 - 객체에 추가 요소를 동적으로 더할 수 있다. 데코레이터 패턴을 사용 시 서브클래스를 만드는 경우에 비해 훨씬 유연하게 기능을 확장할 수 있다. 예시 코드 예시 구현 코드입니다 public abstract class Beverage { String description = "제목없음"; public String getDescription() { return description; } public abstract double cost(); } public abstract class CondimentDecorator extends Beverage{ public abstract String getDescription(); } public class Espresso extends Beverage{ p.. 2021. 2. 2.
옵저버 패턴 (Observer) - 정의 - 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들한테 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다 의존성을 정의합니다 옵저버 패턴의 경우 신문구독을 생각하면 이해하기 쉽습니다 신문이 발행(객체의 정보 변경)되면 그 정보가 다른 객체들 에게 전달되는 구조라 생각하시면 됩니다 자바에서의 옵저버 패턴을 이용하지 않고 직접 옵저버패턴을 구현하는 다이어그램입니다 ; 아래는 예시 코드입니다 인터페이스 코드들입니다 public interface Subject { //옵저버를 등록하고 제거하는 역할의 메서드 public void registerObserver(ObserverH o); public void removeObserver(ObserverH o); //주제 객체의 상태가 변경되었을때.. 2021. 1. 29.
스트래티지 패턴 (Strategy) -정의- 알고리즘(이하 로직)을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 만든다. 스트래티지 패턴을 활용하면 로직을 사용하는 클라이언트와는 독립적으로 로직을 변경할 수 있다. 예시(해당 예시는 헤드퍼스트 디자인 패턴 책에 나온 예시이다) 무기를 인터페이스로 만든다 그 후 무기를 쓰는 구체적 행위를 구현 클래스에서 따로 정의한다 Character추상클래스에서는 각각의 직업이 상속받는다 기사는 검을 쓰지만 활을 쓸수도 있습니다 무기의 교체가 일어날 수 있기 때문에 모든 기사 클래스에서 모든 무기의 사용법을 구현하는 것은 비효율적입니다 이렇게 특정하게 변경을 해야 할 경우 단지 인터페이스의 구현 클래스를 새로 끼우는 방식으로 수정이 가능한 것이 이 패턴의 큰 장점입니다 예시 코드입니다 //먼저 캐.. 2021. 1. 28.
GOF 디자인 패턴 한줄 정리! 그동안 공부하며 했던 디자인 패턴을 일단 간략 요약정리해볼까 합니다 물론 각 디자인 패턴을 최대한 간단히 설명한 것이라 여기에 간단하게 정리 후 자세한 내용은 따로 포스팅할 예정입니다. 모든 내용은 제가 공부하며 정리한 부분이기 때문에 오류가 있을 수 있습니다 틀린 사항 있을 시 댓글에 수정 적어주시면 감사하겠습니다. 1. 스트래티지 패턴(Strategy) (link) 일명 전략 패턴 알고리즘을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 만든다. 알고리즘을 사용하는 클라이언트와 독립적으로 로직을 변경이 가능하다. 2. 스테이트 패턴 (State) 객체의 내부 상태가 바뀜에 따라서 객체의 행동을 정의할 수 있다 클래스가 바뀌는 효과를 낸다 (실제로 클래스가 바뀌진 않는다 스트래티지 패턴하고의 가.. 2021. 1. 21.
728x90