[JAVA] 데코레이터 패턴

2021. 12. 10. 22:41·JAVA
728x90

데코레이터 패턴 정의

  • 기능을 동적으로 유연하게 확장할 수 있게 해주는 패턴
  • 추가 기능을 Decorator 클래스로 정의한 후 조합함으로써 추가기능 조합을 설계하는 패턴 
  • 용도에 따라 객체의 기능을 계속 추가(데코레이트) 할 수 있게 해줌

데코레이터 패턴 특징

  • 객체에 동적으로 기능을 추가할 수 있게 해줌
  • 기능이 많아질수록 데코레이터 클래스들이 계속 추가 되어야 하기 때문에 클래스가 많아져서 복잡성이 높아짐
  • 겹겹으로 애워싸기 때문에 객체의 정체를 알기가 힘듬

데코레이터 패턴 용도

  • 요소들을 계속 수정하면서 사용하는 구조 인 경우
  • 오소들을 조합해서 사용하는 경우

데코레이터 예시

public interface Box {
    void wrap();
}

public class GiftBox implements Box {

    @Override
    public void wrap() {
        System.out.println("선물박스 포장");
    }
}

public class GiftBoxDecorator implements Box {

    private Box box;

    public GiftBoxDecorator(Box box) {
        this.box = box;
    }

    @Override
    public void wrap() {
        box.wrap();
    }
}

public class FoodBoxDecorator extends GiftBoxDecorator {

    public FoodBoxDecorator(Box box) {
        super(box);
    }

    @Override
    public void wrap() {
        super.wrap();
        System.out.print("푸드박스 포장");
    }
}

public class Main {

    public static void main(String[] args) {
        Box box = new GiftBox();
        FoodBoxDecorator foodBoxDecorator = new FoodBoxDecorator(box);
        foodBoxDecorator.wrap();
    }
}
  • 필드에 Box를 생성자를 통하여 값을 넘겨받으면서 데코레이터를 이어 붙여서 정의함 
저작자표시

'JAVA' 카테고리의 다른 글

[JAVA] 제네릭  (0) 2021.12.15
[JAVA] 리플렉션  (0) 2021.12.12
[JAVA] 프록시패턴  (0) 2021.12.09
[JAVA] ThreadLocal  (0) 2021.12.03
[JAVA] 템플릿 메소드 패턴  (0) 2021.11.29
'JAVA' 카테고리의 다른 글
  • [JAVA] 제네릭
  • [JAVA] 리플렉션
  • [JAVA] 프록시패턴
  • [JAVA] ThreadLocal
집한구석
집한구석
  • 집한구석
    tgyun615.info
  • 전체
    오늘
    어제
    • 카테고리 (183)
      • JAVA (38)
      • SPRING (15)
      • KOTLIN (23)
      • NETTY (1)
      • DEVOPS (3)
      • DOCKER (7)
      • KUBERNETES (2)
      • JAVASCRIPT (1)
      • SPLUNK (3)
      • ELK (7)
      • KAFKA (2)
      • GO (4)
      • ALGORITHM & DATA STRUCTURE (9)
      • IDE (5)
      • OS (16)
      • NETWORK (14)
      • GCP (2)
      • AWS (2)
      • DATABASE (10)
      • CLEANCODE (7)
      • OTHER (12)
  • 최근 글

  • 태그

    SQL
    클린코드
    ElasticSearch
    docker
    JPA
    Spring
    엘라스틱서치
    Elk
    Kafka
    이펙티브코틀린
    이펙티브 코틀린
    코틀린
    자바
    go
    splunk
    프로그래머스
    IntelliJ
    java
    AWS
    cleancode
  • 링크

    • github
    • linkedin
    • resume
  • hELLO· Designed By 정상우. v4.10.3
집한구석
[JAVA] 데코레이터 패턴
상단으로

티스토리툴바