일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- jest
- 호키도키
- 자바스크립트
- Svelte
- SWIFT
- 비동기
- 호키스
- hokeys
- 개발
- queue
- 스위프트
- 리액트 예제
- 이종호
- 자바스크립트 자료구조
- 스벨트
- Hitit
- hokidoki
- IOS
- 개발자
- 자스민
- 계명대 이종호
- 힛잇
- data structure
- react
- HTML
- javascript
- TDD
- 계명대
- 자료구조
- 리액트
Archives
- Today
- Total
Dog foot print
[GOF] 컴포지트 패턴 본문
컴포지트 패턴
활용 : 객체들의 관계를 트리구조로써 부분 전체 계층을 표현하는 패턴으로 사용자가 단일 객체 복합 객들도 모두 동일하게 다룰 수 있도록 할 때 사용 한다.
객체 구성
- Component : 인터페이스를 정의하며, 컴포지트 객체에 대한 기본 동작을 구현한다.
Leaf 와 Composite가 구현해야 하는 interface이며, 이 두 요소는 상황에 따라 개별적인 클래스가 아닌 Component 인터페이스로 다루어 진다.
- Composite : Leaf 혹은 Composite 인스턴스를 자식으로 가진다.
- Leaf : Composite의 자식의 역할을 하며, 이 노드가 Compsite를 자식으로 두지 않는다.
책의 카테고리라는 구성으로 본 Composite 패턴 .
카테고리 : 카테고리는 책을 포함 할 수도 있고, 카테고리를 하위 자식으로 설정이 가능하다. 즉 Component interface를 구현한 클래스는 모두 자식으로 받아 드릴 수 있다.
책 : 책은 그 어떤 자식도 가질 수 없다. 책은 카테고리에 종속적이기에 부모가 필수요소이다.
컴포넌트 : 책과 카테고리를 한개의 인터페이스로 엮는 역할이다.
컴포넌트
// Component
interface ComponentInterface {
id: string
description: string
parent: ComponentInterface | null
getParent: () => ComponentInterface | null
}
** 책 **
class Book implements ComponentInterface {
constructor(
public id: string,
public description: string,
public parent: ComponentInterface
) { }
getParent() : ComponentInterface{
return this.parent
}
}
카테고리
class Category implements ComponentInterface {
children: ComponentInterface[] = []
constructor(
public id: string,
public description: string,
public parent: ComponentInterface | null
) { }
add(component: ComponentInterface) {
this.children.push(component)
}
remove(id: string) {
if (this.children.length == 0) { return }
const index = this.children.findIndex((component) => component.id == id);
if (index != -1) {
this.children.splice(index, 1)
} else {
this.children.forEach((e) => {
if (e instanceof Category) {
e.remove(id)
}
})
}
}
getParent() : ComponentInterface | null {
return this.parent
}
}
장점 과 단점
장점 : 컴포넌트 인터페이스를 구현한다면 새로운 클래스의 추가가 용이하다.
단점 : 한개의 인터페이스로 객체를 취급하기 때문에 객체간 구별이 어렵다.
반응형
'Architecture' 카테고리의 다른 글
[GOF] 싱글톤 패턴 (0) | 2021.10.31 |
---|---|
[GOF] Builder 패턴 (0) | 2021.10.23 |
[GOF] 추상 팩토리 메서드 패턴 (0) | 2021.10.23 |
[GOF] 팩토리 메서드 패턴 (0) | 2021.10.17 |
[Architecture] S.O.L.I.D [D] (0) | 2021.05.13 |
Comments