티스토리 뷰
- 디자인 패턴
- 기본 패턴 ( 디자인 패턴 1 )
- 생성 패턴
- 구조 패턴
- 행동 패턴 ( 디자인 패턴 2 )
디자인 패턴
- 디자인 패턴
→ 설계에서 특정 문제를 해결하기 위해 반복적으로 사용되는 해결책의 모음, 상호교류 하는 객체와 클래스에 대한 설명
→ 어떤 상황의 문제에 대한 해법
→ 전문가의 노하우를 모아 놓은 것
→ 코드의 견고함, 재사용 용이하게 함
→ 패턴 이름 : 설계의 의도 파악
→ 문제 : 해결할 문제와 배경
→ 해법 : 설계를 구성하는 요소, 요소들의 관계, 책임, 협력 관계에 대한 서술
→ 결과 : 디자인 패턴을 적용해서 얻은 장단점
- 설계 목표
→ 재사용성 , 융통성, 유지보수성 ( 코드의 일반화, 의존성 최소화 )
→ 강인성, 충분함, 정확성 ( 모듈화된 설계 , 강인한 부품 )
- 디자인 패턴 고르기
→ 패턴의 의도 / 어떤 문제를 해결하는지 / 다른 패턴과의 관계를 파악
→ 설계의 가변성, 재설계의 원인 파악
→ 변화를 수용하는 설계
→ 객체의 직접 생성X
→ 연산 / 플랫폼 / 알고리즘 대한 의존성은 낮아야 함
→ 추상 팩토리, 가교, 메멘토, 프록시, 빌더, 반복자, 템플릿 메서드의 사용
→ 객체의 표현이나 구현을 감춘다
→ 계층화와 추상성을 이용한 낮은 결합도
→ 객체 합성과 재정의를 통한 서브 클래싱
- GoF 디자인 패턴
1. 생성 패턴
→ 인스턴스를 만드는 절차를 추상화하는 패턴
→ 객체의 생성, 합성, 표현과 시스템을 분리한다
1-1. 팩토리 메서드
→ 객체를 생성하는 인터페이스는 미리 정의
→ 인스턴스를 만드는 것은 서브 클래스에서 결정
→ 인스턴스를 만드는 시점을 서브 클래스에 위임
1-2. 원형 ( Prototype )
→ 생성할 객체의 종류의 원형이 되는 예시물을 이용
→ 원형을 복사함으로써 새로운 객체 생성
1-3. 추상 팩토리
→ 구체적인 클래스 지정 X
→ 관련성을 갖는 객체의 집합을 생성
→ 서로 독립적인 객체들의 집합을 생성할 수 있는 인터페이스를 제공
1-4. 빌더
→ 복합 객체의 생성과 표현 방법을 분리
→ 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 한다
1-5. 단일체 ( Singleton )
→ 어떤 클래스의 인스턴스는 오직 하나임을 보장
→ 위 인스턴스에 접근할 수 있는 전역적 접촉점을 제공하는 패턴
2. 구조 패턴
→ 더 큰 구조를 형성하기 위해 클래스와 객체를 어떻게 합성하는지에 대한 패턴
→ 상속을 이용한 인터페이스나 구현을 복합
2-1. 적응자 ( Adapter )
→ 클래스의 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환
→ 호환성이 없는 인터페이스로 인해 동작 불가능한 클래스들을 작동하게 한다
2-2. 가교 ( Bridge )
→ 구현부에서 추상층을 분리 / 독립적으로 변형 가능
2-3. 복합체 ( Composite )
→ 객체들의 관계를 트리 구조로 구성
→ 부분-전체 계층을 표현
→ 사용자가 단일 / 복합 객체를 동일하게 다루게 한다
2-4. 장식자 ( Decorator )
→ 객체에 책임을 덧붙이는 패턴
→ 기능 확장이 필요할 때 서브클래싱 대신 쓸 수 있는 유연한 대안
2-5. 퍼사드 ( Façade )
→ 서브시스템에 있는 인터페이스 집합에 대해 하나의 통합 인터페이스를 제공
→ 서브시스템을 쉽게 사용하게 하는 상위 인터페이스 제공
2-6. 플라이급 ( Flyweight )
→ 크기가 작은 객체를 공유해 효율적인 지원
2-7. 프록시 ( Proxy )
→ 어떤 다른 객체로 접근하는 것을 통제하기 위해 대리자(surrogate) 나 자리채움자(placeholder)를 제공
3. 행동 패턴
→ 응용 프로그램에 따라 해동이 다른 객체로 옮겨지거나 or 알고리즘이 대체되는 변화를 만족하는 패턴
→ 객체나 클래스에 대한 패턴의 정의 X / 객체와 클래스의 교류 방법에 대한 정의 O
3-1. 책임 연쇄 ( Chain Responsibility )
→ 요청 전송 객체와 요청 수신 객체의 결합을 피하는 기능
→ 요청 수신 객체를 연쇄적으로 묶고, 요청 처리 객체를 만날 때 까지 chain 을 따라 요청 전달
3-2. 명령 ( Command )
→ 요청을 객체의 형태로 캡슐화
→ 요청이 다른 사용자의 매개변수화
→ 요청 저장/로깅/연산의 취소 지원
3-3. 해석자 ( Interpreter )
→ 주어진 언어의 문법 표현 수단 정의
→ 주어진 언어로 작성된 문장의 해석기
3-4. 반복자 ( iterator )
→ 내부를 노출하지 않고, 어떤 객체 집합에 속한 원소를 순차적으로 접근할 수 있는 방법 제공
3-5. 중재자 ( Mediator )
→ 한 집합에 속해있는 객체들의 상호작용을 캡슐화하는 객체를 정의
→ 객체들이 서로 직접 참조하지 않도록 함
→ 객체들 사이에 소결합(loose coupling) 촉진
→ 객체들의 상호작용을 독립적으로 다양화
3-6. 메멘토 ( Memento )
→ 캡슐화를 위배하지 않고, 객체의 내부 상태를 실체화
3-7. 감시자 ( Observer )
→ 객체 사이에 일 대 다 의존관계를 정의
→ 어떤 객체가 변할 때 그 객체의 의존하는 다른 객체들이 변화를 통지받고 자동으로 갱신되게 함
3-8. 상태 ( State )
→ 객체가 내부 상태에 따라 스스로 행동을 변경하도록 허가
→ 객체가 마치 자신의 클래스를 변경하는 것처럼 보이게 함
3-8. 전략 ( Strategy )
→ 동일 계열의 알고리즘군 정의 / 캡슐화 / 상호교환을 가능하게 함
→ 알고리즘을 사용자와 관계없이 다양하게 변경할 수 있게 함
3-8. 템플릿 메서드
→ 객체의 연산에 알고리즘의 뼈대만을 정의
→ 각 단계에 수행할 구체적 처리 / 알고리즘 처리는 서브 클래스로 위임
3-9. 방문자 ( Visitor )
→ 객체 구조를 이루는 원소에 대해 수행할 연산을 표시
→ 연산을 적용할 원소의 클래스를 변경하지 않고 새로운 연산 정의 가능
- 요약
생성 패턴
à 추상 팩토리 : 제출 객체군
à 빌더 : 복합 객체 생성 방법
à 팩토리 메서드 : 인스턴스화할 객체의 서브 클래스
à 원형 : 인스턴스화될 객체 클래스
à 단일체 : 클래스의 인스턴스가 하나인 경우
구조 패턴
→ 적응자 : 객체에 대한 인스턴스
→ 가교 : 객체 구현
→ 복합체 : 객체의 합성 / 구조
→ 장식자 : 서브클래싱 없이 객체의 책임성
→ 퍼시드 : 서브 시스템에 대한 인터페이스
→ 플라이급 : 객체의 저장 비용
→ 프록시 : 객체 접근 방법
행동 패턴
→ 책임 연쇄 : 요청을 처리하는 객체
→ 명령 : 요청 처리 시점 / 처리 방법
→ 해석자 : 언어의 문법 / 해석
→ 반복자 : 집합 객체 요소들의 접근 방법 / 순회 방법
→ 중재자 : 객체들의 상호작용
→ 메멘토 : 어떤 정보를 언제 외부에 저장하는지
→ 감시자 : 다른 객체에 종속적인 객체 수 / 상태 변경 방법
→ 상태 : 객체의 상태
→ 전략 : 알고리즘
→ 템플릿 메서드 : 알고리즘 단계
→ 방문자 : 객체에 적용할 수 있는 연산
기본 패턴
- 객체지향 패턴
1. 개념 실체 패턴 : 객체의 정보 공유
→ 실체 : 공통된 정보를 가진 멤버
→ 개념 : 공유하는 정보를 담은 클래스
2. 플레이어 역할 패턴 : 하나의 클래스에 다양한 역할을 표현
→ 플레이어가 환경에 따라 다른 역할을 해야 할 때
3. 위임 패턴 : 다른 클래스가 가진 특정 오퍼레이션을 활용해 책임을 위임하는 패턴
→ 다른 클래스의 오퍼레이션에 작업을 요청
→ 상속보다 연관을 통해 효과적인 재사용
4. 계층 구조 패턴 : 계층 관계를 묶어 동일한 처리를 하고 싶은 경우
→ 회사의 조직도 / 트리 / 파일 구조를 다룰 때 용이
'전공 > 소프트웨어 공학' 카테고리의 다른 글
10. 구현 (0) | 2023.07.11 |
---|---|
9. 디자인 패턴 2 (0) | 2023.07.07 |
7. 아키텍처 설계 2 (0) | 2023.07.07 |
6. 아키텍처 설계 1 (0) | 2023.07.03 |
5. 클래스 모델링 (0) | 2023.04.12 |
- Total
- Today
- Yesterday
- Regular Expression
- 소프트웨어 공학
- 컴퓨터네트워크
- 전송계층프로토콜
- 인터네트워크
- lan
- CUDA VISUAL STUDIO 2022 지원
- 혼잡제어
- Compiler
- Instnat-ngp
- 컴파일러
- 클래스 모델링
- Proper CFL
- 소프트웨어공학
- 아키텍처 설계
- 셀룰러네트워크
- 회선교환
- 디자인 패턴
- 비동기전송모드
- Extension to Regular Expression
- Instant-NGP
- 설계 원리
- 백준 2437
- Ambiguity
- ngp 실행
- NGP-ERROR
- ngp 오류
- ATM
- 인터넷프로토콜
- Transition Function
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |