Visitor 패턴과 Decorator 패턴 이해하기

2024. 10. 13. 12:43·Category/정보처리기사
728x90

Visitor 패턴과 Decorator 패턴은 둘 다 새로운 기능을 추가하는 방법이지만, 그 방식과 사용 목적이 다릅니다. 

1. Decorator 패턴: "객체에 기능을 덧붙이는 패턴"

Decorator는 말 그대로 장식을 덧붙이는 것처럼, 기존 객체에 새로운 기능을 덧붙이는 패턴입니다.

커피를 예로 들어봅시다.

  • 기본 커피가 있죠. 커피는 그냥 커피일 뿐입니다.
  • 하지만, 여기에 우유를 넣고 싶다면? 우유를 추가해서 커피에 새로운 기능을 붙입니다.
  • 더 나아가서 설탕을 넣고 싶다면? 또 설탕을 추가해서 커피를 감쌉니다.

이렇게 기본 객체(커피)에 추가 기능(우유, 설탕)을 덧붙여서 객체의 기능을 확장하는 방식입니다.

  • Decorator 패턴은 객체를 변경하지 않고 필요할 때마다 기능을 추가할 수 있는 게 장점입니다.

2. Visitor 패턴: "여러 객체를 방문해서 작업하는 패턴"

Visitor는 여러 객체를 돌아다니면서 각각의 객체에서 특정 작업을 수행하는 패턴입니다.

박물관이 있다고 생각해봅시다.

  • 박물관에는 그림, 조각상, 화석 등 다양한 전시품들이 있어요.
  • 이때, 큐레이터가 박물관의 전시품을 하나씩 방문하면서 설명을 추가합니다.
  • 큐레이터는 그림, 조각상, 화석에 각각 다른 설명을 덧붙일 수 있죠.

이처럼 Visitor 패턴은 여러 다른 종류의 객체들을 방문하면서, 그 객체마다 다른 작업(설명 추가)을 수행하는 패턴입니다.

쉽게 요약하면:

  • Decorator 패턴은 "한 객체에 여러 기능을 덧붙인다."
    • 예: 기본 커피에 우유, 설탕 등 다양한 옵션을 붙이는 것.
  • Visitor 패턴은 "여러 객체를 돌아다니며 각각의 작업을 수행한다."
    • 예: 박물관 큐레이터가 각 전시품(그림, 조각상)에 설명을 붙이는 것.

차이를 기억하는 쉬운 방법:

  • Decorator는 하나의 객체에 여러 기능을 추가하는 데 사용.
  • Visitor는 여러 객체를 방문해서 작업을 수행하는 데 사용.
728x90

'Category > 정보처리기사' 카테고리의 다른 글

OSI 7계층(OSI 7 Layer)이란?  (0) 2024.10.13
UML (Unified Modeling Language) 클래스 간의 관계 정리  (0) 2024.10.13
Factory Method Pattern (팩토리 메서드 패턴)이란?  (0) 2024.10.13
UML (Unified Modeling Language) 다이어그램이란?  (1) 2024.10.12
XOR(배타적 논리합, Exclusive OR)이란?  (0) 2024.10.12
'Category/정보처리기사' 카테고리의 다른 글
  • OSI 7계층(OSI 7 Layer)이란?
  • UML (Unified Modeling Language) 클래스 간의 관계 정리
  • Factory Method Pattern (팩토리 메서드 패턴)이란?
  • UML (Unified Modeling Language) 다이어그램이란?
Corinee
Corinee
  • Corinee
    Coding Note
    Corinee
  • 전체
    오늘
    어제
    • 분류 전체보기 (351) N
      • Category (268) N
        • Algorithm (7)
        • SQL (1)
        • Java (4)
        • C (9)
        • React (6)
        • JavaScript (9)
        • CSS (2)
        • Node (1)
        • SpringBoot (26) N
        • Database (3)
        • Network (1)
        • Django (6)
        • Python (21)
        • Flask (4)
        • iOS (25)
        • Swift (4)
        • Flutter (11)
        • Dart (3)
        • Git (1)
        • Firebase (1)
        • Gof (1)
        • 정보처리기사 (112)
        • AI (5)
        • NestJs (4)
        • Docker (1)
      • Projects (1)
        • Chrome Extension (1)
      • 눈 감고 치는 (0)
        • Socket (0)
      • Note (76)
        • nk (75)
      • 개인 정보 처리 방침 (1)
      • 취업 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Jest
    Collections
    react router
    useEffect
    inp
    소프트웨어 버전 관리
    public vs assets
    x.y.z (메이저.마이너.패치)
    named export vs default export
    defaultdict
    프로세스 강제 종료
    react
    원시값(primitive)
    mermaid-cli
    core web vitals
    시맨틱 버전(semantic versioning
    semver)
    javascript 필수 문법
    ajax (asynchronous javascript and xml)
    styled-components
    math.h
    intellij 콘솔 한글 깨짐
    counter
    chrome extension 자동 배포
    json.parse(json.stringify())
    중첩 함수(nested function)
    jackson 라이브러리
    structuredclone()
    stdlib.h
    쉽게 풀어쓴 C언어 Express
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Corinee
Visitor 패턴과 Decorator 패턴 이해하기
상단으로

티스토리툴바