Gof Design Pattern
-
[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..
-
[GoF] 빌더 패턴(Builder Pattern)Gof Design Pattern 2021. 12. 3. 13:30
빌더 패턴(Builder Pattern) 빌더 패턴이란? 복잡한 객체를 생성하는 클래스와 구현하는 클래스를 분리하여, 동일한 생성 과정에서도 서로 다른 결과물이 나올 수 있도록 방법을 제공합니다. 사용자는 Builder에서 제공하는 메서드를 사용하여 (구현)결과물을 얻을 수 있습니다. 빌더 패턴 왜 사용할까? 객체를 생성할 때 생성 과정과 구현 방법을 분리함으로써 동일한 객체를 생성에서 과정에서 여러 다른 표현이 나올 수 있다. 빌더 패턴을 사용하게 되면 생성과 구현을 분리할 수 있다. 구현을 다양하게 할 수 있다. 복잡한 객체를 생성하는 절차를 세밀하게 나눌 수 있다. 사용자는 구체적인 사항을 알 필요가 없다. 클래스 다이어그램 객체 협력 Builder Product의 각 요소들을 생성하는데 필요한 추..
-
[GoF] 추상 팩토리 , Abstract FactoryGof Design Pattern 2021. 9. 6. 16:27
추상 팩토리 , Abstract Factory 추상 팩토리 패턴이란? 서로 연관이 있는 객체들을 묶어서 팩토리 클래스로 만들고, 이를 팩토리 조건에 따라 생성하도록 다시 팩토리를 만들어서 객체를 생성하는 패턴. 즉, 여러 제품군을 한꺼번에 생성하는 패턴이다. 추상 팩토리 패턴 왜 사용할까? 구체적인 클래스를 생성하지 않고도 서로 연관된 여러 객체의 군(cluster)를 생성하기 위한 인터페이스를 제공하기 위해 사용합니다. 예를 들어 DB 종류에 따라 DAO 클래스가 달라져야 한다고 할 때, 현재 사용해야 하는 DB의 종류에 따라 DAO 인스턴스를 한꺼번에 생성하도록 할 수 있습니다. 객체가 생성되고 구성되고 표현되는 방식과 상관 없이 시스템을 독립적으로 만들 수 있습니다. 하나 이상의 제품군들 중 하나를..