본문 바로가기

Programming/DesignPattern10

[디자인 패턴] 컴포지트(Composite) 패턴 Goal 컴포지트 패턴을 이해한다. 컴포지트(Composite) 패턴 전체 - 부분의 관계를 갖는 객체들 사이의 관계를 정의할 때 유용한 패턴 Component : 구체적인 부분, 즉 Leaf 클래스와 전체에 해당하는 Composite 클래스에 공통 인터페이스를 정의 Leaf : 구체적인 부분 클래스 Composite : 전체 클래스로 복수 개의 Component를 갖도록 정의. 복수 개의 Leaf를 가질 수 있다. 컴포지트 패턴은 부분 - 전체의 관계를 갖는 객체들을 정의할 때 유용하다. 예를 들어서 컴퓨터(전체)와 [모니터, 마우스, 스피커](부분)의 관계를 정의할 때 사용할 수 있다. 컴퓨터와 컴퓨터에 추가 장치를 지원하는 기능을 구현해보자 우선 컴퓨터를 모델링할 때 기본적으로 키보드, 본체, 모니.. 2021. 6. 4.
[디자인 패턴] 추상 팩토리(Abstract Factory) 패턴 Goal 추상 팩토리 패턴을 이해한다. 추상 팩토리(Abstract Factory) 패턴 관련성 있고 서로 의존적인 여러 종류의 객체를 일관성 있는 방식으로 생성할 때 유용한 패턴 AbstractFactory : 실제 팩토리 클래스의 공통 인터페이스, 각 제품의 부품을 생성하는 기능을 추상 메서드로 정의 ConcreteFactory : 구제적인 팩토리 클래스로 AbstractFactory 클래스의 추상 메서드를 오버라이드함으로써 구체적인 제품을 생성 AbstractProduct : 제품의 공통 인터페이스 ConcreteProduct : 구체적인 팩토리 클래스에서 생성되는 구체적인 제품 ※ 팩토리 메서드 패턴과 추상 팩토리 패턴은 엄연히 다르다. 팩토리 메서드 패턴은 객체를 생성하는 코드를 별도의 클래스/.. 2021. 6. 3.
[디자인 패턴] 팩토리(Factory) 메서드 패턴 Goal 팩토리 메서드를 이해한다. 팩토리(Factory) 메서드 패턴 팩토리 메서드 패턴은 객체를 생성하는 코드를 별도의 클래스/메서드로 분리해 캡슐화하는 패턴 팩토리 메서드 패턴은 객체를 생성하는 코드를 별도의 클래스/메서드로 분리함으로써 객체 생성 방식의 변화에 대비하는데 유용하다. 프로그램이 제공하는 기능은 상황에 따라 언제나 변경될 수 있기 때문에 아래와 같은 문제점이 발생할 수 있다. 기능의 변경이나 상황에 따른 기능의 선택은 바로 해당 객체를 생성하는 코드의 변경을 초래한다. 상황에 따라 적절한 객체를 생성하는 코드는 자주 중복될 수 있다. 따라서 특정 기능의 구현은 개별 클래스를 통해 제공되는 것이 바람직한 설계이다. Product : 팩토리 메서드에 생성될 객체의 공통 인터페이스 Conc.. 2021. 5. 31.
[디자인 패턴] 템플릿(Template) 메서드 패턴 Goal 템플릿(Template) 메서드 패턴을 이해한다. 템플릿(Template) 메서드 패턴 전체적인 알고리즘은 상위 클래스에서 구현하면서 다른 부분은 하위 클래스에서 구현할 수 있도록 하는 디자인 패턴 템플릿 메서드 패턴은 전체적으로 동일하면서 부분적으로는 다른 구문으로 구성된 메서드의 코드 중복을 최소화할 때 유용하다. 동일한 기능을 상위 클래스에 정의하면서 확장/변화가 필요한 부분만 서브 클래스에서 구현할 수 있다. 하위 클래스에 오버라이드될 필요가 있는 PrimitiveOperation 메서드를 primitive 또는 hook 메서드라고 부른다. AbstractClass : 템플릿 메서드를 정의하는 클래스. 하위 클래스에 공통 알고리즘을 정의하고 하위 클래스에서 구현될 기능을 primitive.. 2021. 5. 25.