본문 바로가기

design pattern19

디자인패턴 3가지(MVC, MVVM, MVP) 디자인패턴 3가지(MVC, MVVM, MVP) 훌륭한 설계란 인터페이스 간의 의존성을 제거하는 것에 있습니다. MVC 패턴 View와 Model 사이에 Controller를 두어 View와 Model의 의존성을 없애기 위해 사용한다. 1. 구조 * Model :Application에서 사용되는 데이터와 그 데이터를 처리하는 부분 * View :사용자에게 보여지는 인터페이스 *Controllr :사용자의 입력을 받고 처리하는 부분 2. 동작 3. 특징 ① Controller는 여러 개의 View를 선택할 수 있는 1:N 관계 ② Controller는 View를 선택할 뿐 직접 업데이트하지 않음 (View는 Controller 존재를 모름) ③ 단순하고 보편적으로 많이 사용되는 디자인패턴 ④ View와 Mo.. 2023. 4. 18.
14. Bridge 패턴 Bridge 패턴 bridge 패턴 bridge는 '무엇인가를 연결한다'는 의미이다. bridge 패턴도 두 장소를 연결하는 역할을 한다. bridge 패턴은 기능의 클래스 계층과 구현의 클래스 계층을 연결하고, 구현부에서 추상 계층을 분리하여 각자 독립적으로 변형할 수 있게 해준다. [그림 5-37]에서 supperClass의 method()는 implementor의 impMethod()를 사용해 구현되고, subClass의 subMethod()는 supperClass의 method()들을 사용해 구현된다. 그 결과 subClass와 implementor(concreteImplement)가 분리된다. bridge 패턴은 구현과 인터페이스(추상화된 부분)를 분리할 수 있고, 추상화된 부분과 실제 구현 부.. 2023. 4. 12.
13. Strategy 패턴 Strategy 패턴 전략은 하나, 전술은 다양하게 strategy 패턴 strategy의 의미는 '전략', '전술'이다. 소프트웨어 개발에서 전략이나 전술은 알고리즘으로 구현한다. strategy 패턴은 [그림 5-47]과 같다. 즉 알고리즘 군을 정의하고(strategySort 추상 클래스) 같은 알고리즘(버블 정렬, 퀵 정렬, 선택 정렬 등)을 각각 하나의 클래스로 캡슐화한(quickSort 클래스, selectSort 클래스, bubbleSort 클래스) 다음, 필요할 때 서로 교환해서 사용할 수 있게 해준다. 이 패턴을 사용하면 클라이언트와 무관하게 독립적으로 알고리즘을 변경할 수 있고(quickSort→bubbleSort), 클라이언트는 독립적으로 원하는 알고리즘을 사용할 수 있다. 즉 이 패.. 2023. 4. 11.
iterator 패턴 iterator 패턴 집합체의 구성물 보여주기 iterator 패턴 iterate는 '반복하다'라는 뜻이고, iterator은 '반복자'라는 뜻이다. 즉 무엇인가 반복할 때 iterator 객체를 사용한다. iterator 객체는 반복하는 데 필요한 첫 번째 요소를 가리키는 메서드, 다음 요소를 가리키는 메서드, 마지막 요소를 가리키는 메서드, 현재 포인터가 가리키고 있는 요소를 반환하는 메서드 등을 포함한다. iterator 패턴은 반복이 필요한 자료구조를 모두 동일한 인터페이스를 통해 접근할 수 있도록 [그림 5-43]처럼 iterator 객체 속에 넣은 다음, iterator 객체의 메서드를 이용해 자료구조를 활용할 수 있도록 해준다. 반복에 사용되는 자료구조에는 배열, 리스트, Set, Map 등.. 2023. 4. 6.
11.Builder 패턴 / Chain of Responsibility 패턴 Builder 패턴 Chain of Responsibility 패턴 chain of responsibility 패턴 책임들이 연결되어 있어 내가 책임을 못 질 것 같으면 다음 책임자에게 자동으로 넘어가는 구조를 말한다. 이런 구조가 필요한 이유를 먼저 살펴보자. 예를 들어, 학생이 학교의 한 부서(학생처)에 상담 전화를 걸었다고 생각해보자. 전화를 받은 사람이 해당 문제는 담당자가 다르다고 실제 담당자의 전화번호만 가르쳐준다면 전화를 건 학생은 일단 전화를 끊고 알려준 번호로 다시 전화를 걸어야 한다. 그런데 알려준 번호로 전화를했는데 이번에도 담당자가 바뀌었다며 다른 전화번호를 알려준다면 학생은 담당자와 연결될 때까지 세 번이나 전화를 걸어야 하므로 매우 불편하고 짜증이 날 것이다. 이와 달리 처음 전.. 2023. 4. 4.
10.composite 패턴 composite 패턴 composite의 의미는 '합성의', '합성물', '혼합 양식'이다. 이를 통해 composite 패턴이 뭔가 합쳐진 형태임을 짐작할 수 있다. 또 composite 패턴의 구성을 보면 일반적인 트리 구조를 하고 있는데, [그림 5-34]처럼 부분-전체의 상속 구조이다. 이와 같이 표현되는 조립 객체를 컴포지트 객체(composite object)라고 한다. composite 패턴은 사용자가 단일 객체와 복합 객체 모두 동일하게 다루도록 한 것이다. 이런 형태는 재귀적인 구조로서, 마치 파일 구조에서 디렉토리 안에 파일이 존재할 수도 있고, 또 다른 디렉토리(서브 디렉토리)가 존재할 수 있는 것과 같다. 즉 composite 패턴은 그릇(디렉토리)과 내용물(파일)을 동일시해서 재.. 2023. 4. 3.
9.observer 패턴 observer 패턴 observer '관찰하는 사람', '관찰자'란 뜻이다. 관찰자는 무엇인가 감시하고 있다가 관찰 대상에 변화가 생기면 이를 즉시 감지하고 알려주는 역할을 한다. 예를 들어 가정에서 아내(observer)는 남편이 퇴근하는 모습을 보고 남편 기분이 좋은지, 나쁜지, 아니면 화가 났는지 등의 상태를 파악해 아이들에게 알려준다. 아이들은 아빠의 기분 상태에 따라 각자 처신한다. 아빠가 화가 많이 나 있으면 큰아들은 놀다가도 열심히 공부하는 모습을 보여주고, 둘째 아들은 집안 청소하는 모습을 보여주고, 막내딸은 주방에서 설거지를 한다. 이때 엄마는 아이들에게 무엇을 하라고 말하지 않는다. 그냥 아빠가 몹시 화가 나 있다고만 얘기한다. 이처럼 어떤 클래스에 변화가 일어났을 때, 이를 감지하여.. 2023. 3. 29.
8.Command 패턴과 Mediator 패턴 Command 패턴과 Mediator 패턴 Command 패턴 command의 의미는 '명령어'이다. 문서편집기의 복사(copy), 붙여넣기(paste), 잘라내기(cut) 등도 모두 명령어이다. 그런데 이런 명령어를 각각 구현하는 것보다는 [그림 5-52]처럼 하나의 추상 클래스에 execute() 메서드를 하나 만들고 각 명령이 들어오면 그에 맞는 서브 클래스(copy_command)가 선택되어 실행하는 것이 효율적이다. 이는 함수 오버로딩(overloading)과 같은 추상화 개념을 사용한 것이다. 그러나 command 패턴은 단순히 명령어를 추상 클래스(abstract class)와 구체 클래스(copy_command, cut_command, paste_command)로 분리하여 단순화한 것으로 .. 2023. 3. 28.
7. Immutable 패턴 / Flyweight 패턴 Immutable 패턴 / Flyweight 패턴 1. Immutable (변하지 않은...) 2.Flyweight (권투 헤비급..가볍다) 2023. 3. 27.
6-2.Instance 패턴 Instance 패턴 예를 들어 풀 만들기 및 필요할 때마다 할당하십시오. 왜? -Java는 Object로 시작하여 Object로 끝납니다. -너무로드 된 JVM 추적 오브젝트 -고려해야 할 사항 언제, 객체를 인스턴스화하는 방법 인스턴스화 객체를 최적화하는 방법 인스턴스 풀은 Singleton의 친구입니다 왜? -관리자 필요 -그러나 여러 관리자가 필요하지 않습니다 -한 명의 관리자만으로 충분 왜? -관리자 필요 -그러나 여러 관리자가 필요하지 않습니다 -한 명의 관리자만으로 충분 2023. 3. 24.
6-1.Singleton 패턴 Singleton 패턴 singleton은 '단독 개체', '독신자'라는 뜻 말고도 '정확히 하나의 요소만 갖는 집합' 등의 의미가 있다. singleton 패턴은 객체의 생성과 관련된 패턴으로서 특정 클래스의 객체가 오직 한 개만 존재하도록 보장한다. 즉 클래스의 객체를 하나로 제한한다. 프로그램에서 이런 개념이 필요할 때는 언제일까? 프린터 드라이버의 예를 들어보자. 여러 컴퓨터에서 프린터 한 대를 공유하는 경우, 한 대의 컴퓨터에서 프린트하고 있을 때 다른 컴퓨터가 프린트 명령을 내려도 현재 프린트하는 작업을 마치고 그다음 프린트를 해야지 두 작업이 섞여 나오면 문제가 될 것이다. 즉 여러 클라이언트(컴퓨터)가 동일 객체(공유 프린터)를 사용하지만 한 개의 객체(프린트 명령을 받은 출력물)가 유일하.. 2023. 3. 22.
5.facade 패턴 facade 패턴 facade는 '건물의 앞쪽 정면(전면)'이란 뜻이다. facade 패턴은 [그림 5-40]에서 적용 전과 후를 비교해보면 어떤 의미인지 짐작할 수 있을 것이다. 몇 개의 클라이언트 클래스와 서브시스템의 클라이언트 사이에 facade라는 객체를 세워놓음으로써 복잡한 관계를 정리(구조화)한 것이다. 즉 모든 관계가 전면에 세워진 facade 객체를 통해서만 이루어질 수 있게 단순한 인터페이스를 제공(단순한 창구 역할)하는 것이다. facade 패턴을 이용하면 서브시스템 내부에서 작동하고 있는 많은 클래스들의 관계나 사용법을 의식하지 않고 facade에서 제공하는 단순화된 하나의 인터페이스만 사용하므로, 클래스 간의 의존 관계가 줄어들고 복잡성 또한 낮아지는 효과를 볼 수 있다. 여기서 f.. 2023. 3. 21.
4-2.Prototype 패턴 Prototype 패턴 패턴 프로그램 코드를 작성하다보면 기존에 만들어진 인스턴스의 내용을 일부 수정하여 사용하고 싶을 때가 있다. 그런 경우 객체를 새로 생성할 때는 사용하는 new Object() 메서드보다 [그림 5-31]처럼 clone() 메서드를 이용해 기존의 것을 복사하여 일부만 바꿔 인스턴스를 생성할 수 있다. 이런 개념을 확장하여 처음부터 일반적인 prototype(원형)을 만들어놓고, 그것을 복사한 후 필요한 부분만 수정하면 new Object() 메서드로 객체를 생성하는 것보다 편리하다. prototype 패턴은 이처럼 인스턴스를 복제하여 사용하는 구조이다. 따라서 생성할 객체의 원형을 제공하는 프로토타입 인스턴스로부터 생성할 객체들의 타입이 결정되도록 한다. 이 패턴은 객체를 생성할 .. 2023. 3. 17.
4-1.RMI란 RMI란 1. Java RMI란? 1.1 개요 RMI(Remote Method Invocation)란? 1. 분산되어 존재하는 객체 간의 메시지 전송(메소드를 호출하는 것 포함)을 가능하게 하는 프로토콜 현대 시스템 개발은 3계층 시스템이 주류로 이루고, 이 3계층인 데이터베이스, 애플리케이션, 클라이언트 모두 객체를 통하여 구현하고 저장하는 일이 많아졌습니다. 그래서 이렇게 분산되어 존재하는 객체간의 메시지 전송을 할 필요가 생겼고 이를 가능케 하는 것이 RMI 프로토콜입니다. 2. RMI 자체는 분산객체 간의 통신을 구현하는 모든 프로토콜을 의미함. (CORBA, DCOM …) RMI는 Java RMI 이전부터 쓰여지던 단어로써 분산객체를 개념을 구현하는 CORBA, DCOM 등을 포함하는 의미입니다.. 2023. 3. 16.
2.Factory 패턴 2.Factory 패턴 abstract factory는 '추상적인 공장'이란 뜻으로, [그림 5-33]과 같이 여러 개의 concrete Product를 추상화시킨 것이다. 따라서 구체적인 구현은 concrete Product 클래스에서 이루어진다. abstract factory에서는 사용자에게 인터페이스(API)를 제공하고, 인터페이스만 사용해서 부품을 조립하여 만든다. 즉 추상적인 부품을 조합해서 추상적인 제품을 만든다. 역할 : 클래스를 인스턴스화합니다 요점 : 제작자와 제품의 연계 상실 이점 : 제품의 제작 방식 변경으로 인한 영향 없음 2023. 3. 13.
1.MVC (Model - View - Controller) 1.MVC (Model - View - Controller) 1. MVC 란 무엇인가 > 모델 -알고리즘 구현 (비즈니스 로직) -환경과 무관 >보기 -환경과 의사 소통 -모델을위한 I / O 인터페이스 구현 컨트롤러 -모델과 뷰 간 데이터 교환 (알림 프로토콜)을 제어합니다 2. MVC를 구현하는 방법 > OPP의 배경 개념 -브레인 스토밍을 통한 기능 및 속성 목록 만들기 -그룹화 -클래스의 정의 -MVC의 역할을 클래스에 할당 2023. 3. 10.
디자인 패턴? 디자인 패턴? - Software Engineering Concept, Created by GOF(Gang of FOUR) (GOF (Gang of FOUR)가 만든 소프트웨어 엔지니어링 개념) - Artifacts from creative OOP - How to DEsign S/W (소프트웨어 설계 방법) - Basic Pattern 23EA, still being Built (기본 패턴 23) 2023. 3. 9.
델파이(Delphi) 디자인패턴(Design pattern) 4탄 델파이(Delphi) 디자인패턴(Design pattern) 4탄 Strategy 패턴 Strategy 패턴을 쉽게 이해하는 방법은, 상속의 단점 두가지(불필요한 기능상속, 다중상속 불허) 보완하기 위한 Interface 의 사용과 Abstract 패턴의 사용을 통한 메서드의 다형성 보장이다. Strategy 패턴에 대해 구글링을 해 보면 Abstract 패턴만을 강조하여 도식화 해 놓고 Strategy 패턴이라고 알려주는 곳이 많은데, 이는 잘못된 설명이다. Strategy 패턴의 진정한 뜻은 자주 바뀌는 개발 요구사항에 대비해 최소의 비용을 들여 전략적으로 코드가 유연성을 가질 수 있도록 설계하는 기법이다. 코드의 유연성이란 말 안에는 기능의 구현없이 완성된 모듈을 재빠르게 가져다 쓸수 있도록 하는 .. 2021. 6. 1.
델파이(Delphi) 디자인패턴(Design pattern) 3탄 델파이(Delphi) 디자인패턴(Design pattern) 3탄 싱글톤(Singletone) 패턴 Singletone 은 single + tone 의 복합어 즉, 하나 + 논조 [ 論調 ] 논조 : 논하는 말이나 글의 투. 위 말을 디자인패턴의 형식에서 풀어 보면 프로그램 전체에서 "오직 하나의 인스턴스 가 존재하여야 한다는 원칙" 입니다. 이런 원칙을 세워서 프로그램을 개발해야 하는 이유는 원칙을 위배하게 되면 프로그램이 뒤죽박죽이 될 수 있기 때문입니다. 프로그램 개발에 있어 싱글톤으로 생성해야 하는 클래스 인스턴스가 여러가지가 존재하겠지만 가장 기본이되고 필수적인 클래스가 바로 어플리케이션의 설정값을 들고 있는 프로그램 설정값 클래스입니다. 특수한 경우가 아니라면 설정값은 프로그램 전체에서 하나이.. 2021. 6. 1.