JAVA/Design Patterns: 52개의 글
팩토리 메서드 패턴 팩토리 메서드 패턴에서는 상위 클래스에서 처리의 골격을 만들고, 하위 클래스에서 구체적인 처리의 내용을 만들었다. 이 패턴을 인스턴스 생성의 장면에 적용한 것이 바로 팩토리 메서드 패턴이다. factory는 공장이라는 의미이다. 인스턴스를 생성하는 공장을 템플릿 메서드 패턴으로 구성한 것이 팩토리 메서드 패턴이다. 즉, 팩토리 메서드 패턴을 사용하면 객체 생성 기능을 제공하는 Factory 클래스를 정의하고 이를 활용하는 방식으로 설계하면 된다.펙토리 메서드 패턴에서는 인스턴스를 만드는 방법을 상위 클래스 측에서 결정하지만 구체적인 클래스 이름까지는 결정하지 않는다. 따라서 인스턴스 생성을 위한 골격과 실제의 인스턴스 생성의 클래스를 분리해서 생각할 수 있다.cp.) 팩토리 메서드 패..
템플릿 메서드 패턴 Templete Method 패턴은 템플릿의 기능을 가진 패턴이다. 상위 클래스 쪽에 템플릿에 해당하는 메서드가 정의되어 있고, 그 메서드의 정의 안에는 추상 메서드가 사용되고 있다.따라서 상위 클래스의 프로그램만 보면 추상 메서드를 어떻게 호출하고 있는지 알 수 있지만, 최종적으로 어떤 처리가 수행되는지는 알 수 없다.추상 메서드를 실제로 구현하는 것은 하위 클래스이다. 하위 클래스 측에서 메서드를 구현하면 구체적인 처리가 결정된다. 서로 다른 하위 클래스가 서로 다른 구현을 실행하면 서로 다른 처리가 결정된다. 서로 다른 하위 클래스가 서로 다른 구현을 실행하면 서로 다른 처리가 실행될 것이다.그러나 어떤 하위 클래스에서 어떤 구현을 하더라도 처리의 큰 흐름은 상위 클래스에서 결정..
프록시 패턴 proxy는 대리인이라는 의미이다.대리인이란 일을 해야 할 본인을 대신(대리)하는 사람이다. 본인이 아니라도 가능한 일을 맡기기 위해서 대리인을 세운다.대리인은 어디까지나 대리에 지나지 않기 때문에 할 수 있는 일에는 한계가 있다.대리인이 할 수 있는 범위를 넘는 일이 발생하면, 대리인은 본인한테 와서 상담을 한다.오브젝트(객체) 지향에서는 '본인'도 '대리인'도 오브젝트(객체)가 된다. 바빠서 일을 할 수 없는 오브젝트 대신에 대리인 오브젝트가 어느 정도 일을 처리하게 된다. ▶ 등장인물 이름 해설 Printer 이름있는 프린터를 나타내는 클래스(본인) Printable Printer와 PrinterProxy 공통의 인스턴스 PrinterProxy 이름있는 프린터를 나타내는 클래스(대리인)..
싱글턴 패턴 프로그램을 실행할 때 보통은 많은 인스턴스가 생성된다. 예를 들어 문자열을 표시하는 java.lang.String 클래스의 인스턴스는 문자열 1개에 대해서 1개가 생성되기 때문에 문자열이 1000개 등장하는 프로그램이라면, 1000개의 인스턴스가 만들어진다.그러나 클래스의 인스턴스가 단 하나만 필요한 경우도 있다. 그것은 시스템 안에서 1개밖에 존재하지 않는 것을 프로그램으로 표현하고 싶을 때이다.즉, 지정한 클래스의 인스턴스 절대로 1개 밖에 존재하는 않는 것을 보증하고 싶을 때 사용한다. Singleton이란 요소를 1개 밖에 가지고 있지 않은 집합을 의미한다. Sington 클래스에서는 인스턴스를 1개 밖에 만들 수 없으며, sington은 static 필드로서 Singleton 클래스..
디자인 패턴의 분류 많은 디자인 패턴을 크게 범주별로 분리를 할 수 있다.범주별로 분리를 해보면서 패턴의 특징을 쉽게 파악할 수 있다. 1. 생성, 행동, 구조 관련 패턴으로 분류 - 생성 관련 패턴 (Creational Pattern) : 객체 인스턴스 생성을 위한 패턴으로, 클라이언트와 그 클라이언트에서 생성해야 할 객체 인스턴스 사이의 연결을 끊어주는 패턴 싱글턴, 팩토리 메소드, 추상 팩토리, 프로토타입, 빌더 패턴 - 행동 관련 패턴 (Behavioral Pattern) : 클래스와 객체들이 상호작용하는 방법 및 역할을 분담하는 방법과 관련된 패턴 스트래티지, 옵저버, 스테이트, 커맨드, 이터레이터, 템플릿 메소드, 인터프리터, 미디에이터, 역할 변경, 메멘토, 비지터 - 구조 관련 패턴 (St..
객체지향 모델링 1. 모델링의 역할(1) 서로의 해석을 공유해 합의를 이루거나 해석의 타당성을 검토한다.(2) 현재 시스템 또는 앞으로 개발할 시스템의 원하는 모습을 가시화한다.(3) 시스템의 구조와 행위를 명세할 수 있으며 시스템을 구축하는 틀을 제공한다. 2. UML 일반(1) UML 정의- 소프트웨어 청사진을 작성하는 표준언어- 소프트웨어 중심 시스템의 산출물을 가시화하고, 명세화하고,구축하고, 문서화하는데 사용- 가시화 언어 : UML은 소프트웨어의 개념모델을 가시적인 그래픽 형태로 작성하여 참여자들의 오류없고 원활한 의사소통이 이루어지게 하는 언어- 명세화 언어 : UML은 소프트웨어 개발과정인, 분석, 설계, 구현 단계의 각 과정에서 필요한 모델을 정확하고 완전하게 명세할 수 있게하는 언어- ..
[JAVA/Design Patterns] - 옵저버 패턴(Observer Pattern)(1/3) - java.util.Observable[JAVA/Design Patterns] - 옵저버 패턴(Observer Pattern) (2/3) - Observer 패턴 직접 구현 4. Observer 패턴의 변경 및 확장 앞에서 JAVA 내장 API java.util.Observable 을 사용한 옵저버 패턴 구현과, 직접 인터페이스를 사용한 구현 두가지를 확인했다. 이제 이번 포스팅에서는 구현한 옵저버 패턴의 변경 및 확장을 어떻게 하면 되는지 알아본다. 아마 앞의 두 포스트를 잘 이해한 사람들은 어떻게 해야 될지 쉽게 머리속에 떠오를 것이다. 인터페이스를 구현한 옵저버패턴 UML이다. 다시 이야기하면, 기상..
옵저버 패턴 (Observer Pattern) (2/3) [JAVA/Design Patterns] - 옵저버 패턴(Observer Pattern)(1/3) - java.util.Observable에 이어서 포스팅하겠다.앞의 포스팅을 보고 오는게 옵저버 패턴을 이해하는데 더 도움이 될 것이다. 3. Observable, Observer 직접 구현하여 Observer 패턴 구현 앞에서 말했듯이 확장과 재사용성을 위해 클래스로 되어있던 Observable을 인터페이스로 만들어 옵저버와 느슨한 결합으로 구현하겠다. (1) 인터페이스의 느슨한 결합 두 객체가 느슨하게 결합되어 있다는 것은, 그 둘이 상호작용을 하긴 하지만 서로에 대해 서로 잘 모른다는 것을 의미한다. - Observable은 Observer의 구..
옵저버 패턴 (Observer Pattern) 옵저버 패턴(Observer Pattern)에서는 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들한테 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다(one-to-many) 의존성을 정의합니다. 옵저버 패턴을 설명하기 위해 아래의 구조를 상황으로 옵저버 패턴을 구현해 보겠습니다. 그림을 설명하면, 옵저버 패턴으로 구성된 시스템은 여러개의 디스플레이 장비를 옵저버로 등록돼 있습니다. 일대다로 의존관계에 있는 이 시스템에 새로운 값이 들어오면, 옵저버로 등록되어 있는 디스플레이 장비에 갱신된 데이터를 전달합니다. 상황기상스테이션에서 옵저버 패턴 시스템에 주기적으로 온도, 습도, 압력 데이터를 전송한다.옵저버 패턴 시스템에서는 전달받은 데이터를 등록..
스트래티지 패턴 (strategy pattern) 스트래티지 패턴(Strategy pattern)에서는 알고리즘군을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 만든다. 스트래티지를 활용하면 알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경할 수 있다. 상속을 이용한 간단한 동물의 행동을 호출하는 시스템에서 스트래티지 패턴(Strategy pattern)을 적용하여 보겠습니다. 1. 상속을 이용한 간단한 시스템 여기서 구현할 동물은 독수리(Eagle)과 호랑이(Tiger)로 Animal 클래스를 상속 받았다. 독수리(Eagle)와 호랑이(Tiger)는 각각의 울기(cry)와 모습(display) 메소드를 구현했다왼쪽의 UML 다이어그램을 살펴보자. abstract를 사용한 추상 클래스..