본문 바로가기

디자인패턴15

구조 패턴 - 장식자(Decorator) - 참조: GoF의 디자인 패턴 - 다른 패턴과의 관계: https://refactoring.guru/design-patterns/decorator - 장식자(Decorator) 아마 한번쯤은 들어봤을법한 랩퍼(Wrapper) 라고도 불리우는 패턴이다. 객체에 동적으로 새로운 책임을 추가할 수 있게 한다. 기능을 추가하려면 서브 클래스를 생성하는것보다 융통성 있는 방법을 제공한다. - 시나리오 GUI 툴킷이 있다고 가정해보자. 모든 사용자 UI 요소에는 필요 없지만, 어떤 특정 사용자 UI 요소에만 스크롤링이나 테두리 같은 속성을 추가할 필요가 있다고 해보자. Text 를 출력하는 서비스를 제공하는 TextView 클래스가 있다고 가정하자. 이 TextView에 스크롤 기능이나 두꺼운 테두리가 필요하다면.. 2021. 5. 11.
구조 패턴 - 가교(Bridge) - 참조: GoF의 디자인 패턴 - 가교(Bridge) 패턴 가교(Bridge) 패턴은 다른 이름으로 핸들/구현부(Handle/Body) 라고도 불리우며, 구현부에서 추상적인 부분을 을 분리하여 독립적으로 다양성을 가질 수 있도록 한다. - 시나리오 보통 하나의 추상적 개념에 대해 여러 가지 구현을 해야할 때, 대부분 상속을 통해 처리한다. 코드에서 추상적인 개념을 인터페이스로 정의하고, 클래스들이 이를 구현하게 처리하는 방식일것이다. 상속은 잘 사용하면 좋은 기법이 되지만 구현부가 추상적 개념에 강하게 종속된다. 추상적 개념과 구현을 분리해서 재사용이 불가능해지거나 확장하기가 쉽지 않다. 이식성이 있는 Window를 추상적 개념으로 보고 이를 UI 툴킷을 써서 구현하는 예를 생각해보자. 이 Window.. 2021. 5. 1.
구조 패턴 - 적응자(Adapter) - 참조: GoF의 디자인 패턴 - 적응자(Adapter) 패턴 적응자 패턴은 다른 이름으로 래퍼(Wrapper)라고 불리우는 패턴이다. 클래스의 인터페이스를 사용자가 원하는 형태로 변환(적응)시킨다. 이렇게 변환(적응)을 통해서 일치하지 않는 인터페이스를 갖는 클래스들이 함께 동작할 수 있도록 한다. - 시나리오 그림 편집기가 있다고 가정해보자. 그림판의 주요한 추상적 개념은 그래픽 객체들이다. 이런 공통 그래픽 요소에 대한 인터페이스는 추상 클래스인 Shape 에 정의되어 있다. 그리고 각 그래픽 요소인 선과 다각형은 각각 LineShape, PolygonShape 과 같은 클래스로 개발해야 한다. 위와 같이 간단한 도형도 있겠지만 TextShape는 텍스트처리시 버퍼관리와 같이 다른 그래픽 요소에 .. 2021. 4. 23.
객체 생성 패턴- 단일체 - 참조: GoF의 디자인 패턴 - 참조: Effective Java 2/E - 단일체(Singleton) 패턴 단일체 패턴은 한 개의 클래스 인스턴스만을 갖도록 보장하며, 이에 대해 접근점을 제공한다. 보통 단일체 패턴의 예로는 창 관리자나 파일 시스템과 같은 예가 있다. 가장 단순하게 구현하려면 전역 변수를 선언하면 되지만 이 방식은 문제가 상당히 많다. 단일체 패턴을 구현할 때에는 클래스가 자체적으로 인스턴스 접근방법을 관리하도록 한다. 위의 그림은 단일체 패턴의 구조를 UML로 나타낸것이다. 단일체 패턴은 참여자가 1개밖에 존재하지 않는다. Singleton: Instance() 연산을 정의하여, 유일한 인스턴스로 접근할 수 있도록 한다. 이때 Instance는 클래스 연산(static)이다. 단.. 2021. 4. 12.
객체 생성 패턴- 추상 팩토리 패턴 - 참조: GoF의 디자인 패턴 - 참조: https://www.baeldung.com/java-abstract-factory-pattern - 추상 팩토리 추상 팩토리는 상세화된 서브 클래스를 정의하지 않고, 관련성이 있거나 독립적인 여러 객체 군을 생성하기 위한 인터페이스를 제공한다. 문장이 어려워 이해하지 못했더라도 낙담할 필요는 없다. 다음에 나올 내용들을 살펴본 뒤 이 문장을 이해하면 된다. 모티프, 프리젠테이션 매니저와 같은 사용자 인터페이스 툴킷 프로그램은 서로 다른 룩앤필을 가지고 있다. 만약 이 툴킷을 이용하여 응용프로그램을 개발한다고 가정해보자. 프로젝트 초반에 모티프 툴킷을 이용하여 개발하자고 표준을 잡고 개발을 시작한다. 개발자들은 열심히 모티프 툴킷을 이용하여 개발을 완료하였다. .. 2021. 2. 15.