디자인패턴
-
[GoF]스테이트 패턴(State Pattern)Gof Design Pattern 2021. 12. 20. 21:12
스테이트 패턴(State Pattern) 스테이트 패턴이란? 클래스가 하나의 상태(state)에 따라 내부의 메서드의 기능이 바뀌는 경우(같은 기능에서 분기(if-else)발생)한다고 하면 이를 각각의 클래스로 분리하는 패턴이다. 스테이트 패턴 왜 사용할까? 객체의 기능이 어떤 상태에 있느냐에 따라 달라질 수 있는데(ex 자동차의 에코모드, 스포츠모드) 이러한 상태가 여러가지이면 if-else와 같은 분기로 표현이 되어 수정,삭제, 추가시 단점이 발생 할 수 있다. 이 때, 기능이 상태(특정 변수같은)에 의존적이라면 스테이트 패턴을 사용하여 클래스로 표현하는 것이 적절하다. 스테이트 패턴을 사용하게 되면 상태에 따라 기능을 분리하여 구현 새로운 상태 추가나 삭제가 용이함 클래스 다이어그램 객체 협력 Co..
-
[GoF] 어댑터패턴(Adapter Pattern)Gof Design Pattern 2021. 12. 19. 21:21
어댑터 패턴(Adapter Pattern) 어댑터 패턴이란? 서로 다른 인터페이스를 중간에서 연결해주기 위해 사용하는 패턴입니다. 이미 사용중이거나 정의된 인터페이스들을 중간에서 맞춰서 적용해 줄 수 있습니다. 어댑터 패턴 왜 사용할까? 클라이언트에서 사용하던 방식대로 호출하여 사용할 수 있도록 조정이 가능합니다. 서로 일치하지 않는 인터페이스를 변경하지 않고 중간에서 호출하여 사용할 수 있도록 제공합니다. 일종의 wrapper와 유사합니다. 어댑터 패턴을 사용하게 되면 Adpter 패턴을 사용하여 클라이언트가 사용하는 방식은 동일하면서 여러 기능이 제공될 수 있다. 클래스 다이어그램 1) 객체 어댑터 (상속) 2) 클래스 어댑터 (합성) 객체 협력 Target : 클라이언트가 사용할 인터페이스를 정의 ..
-
[GoF]컴포지트 패턴(Composite Pattern)Gof Design Pattern 2021. 12. 18. 19:09
컴포지트 패턴(Composite Pattern) 컴포지트 패턴이란? 그릇과 내용물을 동일시 하는 패턴으로 하나 이상의 유사한 객체를 구성으로 설계된 객체로 모두 유사한 기능을 나타낸다. 컴포지트 패턴 왜 사용할까? 부분과 전체에 대한 복합 객체의 트리구조를 나타낼 수가 있습니다. 클라이언트가 개별 객체와 복합 객체를 동일하게 다룰 수 있는 인터페이스를 제공합니다. 재귀적인 구조입니다. 컴포지트 패턴을 사용하게 되면 기본 객체는 복합 객체에 포함이 되고, 복합 객체 역시 또 다른 복합 객체에 포함될 수 있다. 클라이언트 코드는 기본객체와 복합객체에 대한 일관된 프로그래밍을 할 수 있다. 기본 객체가 증가하여도 전체 객체의 코드에 영향을 주지 않는다. 새로운 요소의 추가가 편리하고 범용성 있는 설계가 가능하..
-
[GoF]데코레이터 패턴(Decorator Pattern)Gof Design Pattern 2021. 12. 16. 22:38
데코레이터 패턴(Decorator Pattern) 데코레이터 패턴이란? 데코레이터 패턴은 장식과 실제 내용물을 동일시 하는 패턴으로 생성된 객체에 동적으로 행위를 추가하는 패턴입니다. ※자바의 I/O 스트림 클래스는 Decorator 패턴을 사용한 것입니다. Socket socket = new Socket(); BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); 데코레이터 패턴 왜 사용할까? 기능을 확장할 때 IS-A 관계라면 상속을 사용하게 됩니다. 그러나 HAS-A 관계라면 상속을 사용하기 모호한 상황이게 됩니다. 무언가 기능을 유연하게 추가하고자 할때 데코레이터 패턴을 사용하여 기능을 확장할 수..
-
[GoF]브릿지 패턴(Bridge Pattern)Gof Design Pattern 2021. 12. 13. 19:28
브릿지 패턴(Bridge Pattern) 브릿지 패턴이란? 기능의 계층과 구현의 계층을 분리하는 패턴입니다. 추상화와 구현을 분리하여 각각을 독립적으로 변경할 수 있게 합니다. 두 계층을 연결하는 다리(Bridge)를 통해 연결됩니다. 브릿지 패턴 왜 사용할까? 기능의 확장과 구현의 확장을 따로 계층화 하는 것이 목적입니다. 따라서 기능에 대한 여러가지 구현을 다양하게 적용할 수 있습니다. 기능과 구현이 혼재하면 상속의 관계가 복잡하게 섞이게 됩니다. 브릿지 패턴을 사용하게 되면 기능과 구현의 결합도가 약하기 떄문에 기능이 구현 방식에 얽매이지 않는다. 기능의 구현 클래스를 런타임 때 지정이 가능합니다. 구현이 변경되더라도 기능 클래스 부분에 대한 컴파일은 필요 없습니다. 기능과 구현은 독립적으로 확장되..
-
[GoF]전략 패턴(Strategy)Gof Design Pattern 2021. 12. 10. 16:38
전략 패턴(Strategy) 전략 패턴이란? 상황에 따라 전략이나 알고리즘을 교체하여 사용하는 패턴이다. 전략 왜 사용할까? 다양한 알고리즘(혹은 기능)이 존재할 때, 하나의 클래스로 캡슐화 하여 대체가 가능하도록 할 수 있습니다. 새로운 전략을 반영하거나 기존 전략을 삭제할 때 독립적으로 수행되기에 서로 영향을 끼치지 않습니다. 예를 들어 if-else로 같은 내용이 반복적으로 사용되는 경우 전략 패턴 사용을 고려할 수 있습니다. 전략 패턴을 사용하게 되면 인터페이스에 선언된 기능을 구현한 다양한 정책을 다른 클래스에 영향을 주지 않고 추가, 삭제 할 수 있다. if-else 조건문을 구현하는 것이 아닌 전략 패턴을 사용하여 클래스를 선택하도록 구현하여 유지보수가 용이해진다. 클래스 다이어그램 객체 협..
-
[GoF] 팩토리 메서드 패턴(Factory Method Pattern)Gof Design Pattern 2021. 12. 5. 20:03
팩토리 메서드 패턴(Factory Method Pattern) 팩토리 메서드 패턴이란? 인스턴스 생성을 하위 클래스로 분리하도록 위임하는 패턴이다. 인스턴스를 생성하기 위한 인터페이스를 정의하고자 하지만, 어떤 클래스의 인스턴스를 생성할지에 대한 결정을 하위 클래스에서 결정하도록 할 수 있습니다. (비유하자면 고객이 자량 구매를 요청 했을 때, 공장에서 요청에 맞게 차량을 생산하는 것과 같다.) 팩토리 메서드 패턴 왜 사용할까? 인스턴스를 생성할 때 관련된 동일한 메서드는 상위 클래스에서 처리하여 공통처리되도록 구현이 가능하고, 나머지 상황에 따른 각각 일어날 수 있는 인스턴스에 대한 생성을 하위 클래스에게 처리할 수 있습니다. 팩토리 메서드 패턴을 사용하게 되면 하위 클래스에서 상황에 따라 다양한 인스..
-
[ GoF] 템플릿 메서드 패턴(Template Method Pattern)Gof Design Pattern 2021. 12. 4. 13:40
템플릿 메서드 패턴(Template Method Pattern) 템플릿 메서드 패턴이란? 상위 클래스(abstract class)에서 전반적인 흐름을 구현하고 하위 클래스에서 이를 상속받아 구체적인 처리를 하도록 위임하는 패턴이다. 템플릿 메서드 패턴 왜 사용할까? 오퍼레이션에 알고리즘(단계)의 기본 골격 구조를 정의하고 구체적인 단계는 하위 클래스에 정의한다. abstract 메서드를 통해서 알고리즘(단계)의 일부 단계를 정의함으로써 템플릿 메소드의 처리순서를 정할 수 있다. 템플릿 메서드를 사용하게 되면 템플릿 메서드를 통해 코드 재사용을 할 수 있다. 프레임워크에서 가장 많이 사용되는 패턴 중 하나 이다. 클래스의 공통부분을 분리할 수 있다. 템플릿 메서드에서 사용하는 오퍼레이션들 ConcreteC..