본문 바로가기
JAVA

데코레이터 패턴

by 융디's 2024. 4. 27.
728x90
데코레이터 패턴

데코레이터 패턴

@2024.04.17

Decorator Pattern

💡
객체 지향 디자인 패턴 중 하나로, 객체에 추가적인 기능을 동적으로 더 사용할 수 있도록 해준다.
  • 주요 구성 요소
    • Component
      • 기능을 추가하고자 하는 객체의 인터페이스를 정의
    • ConcreteComponet
      • Component 인터페이스를 구현한 실제 객체
      • 기본 기능이 구현
    • Decorator
      • Componet를 구현하는 데 사용되는 추상 클래스
      • 구체적인 컴포넌트를 감싸는 역할
    • ConcreteDecorator
      • Decorator를 상속받아 구현된 클래스
      • 실제로 추가적인 기능을 제공
  • 특징
    • 상속을 사용하지 않고 객체에 기능을 추가하므로, 객체 간의 결합도가 낮다.
    • 기능을 추가하거나 수정하기 용이하며, 기존 코드의 변경 없이도 새로운 기능 추가 가능
    • 여러 개의 Decorator 를 조합하여 복잡한 기능을 생성
  • IO에서의 데코레이터 패턴
    • InputStream, OutputStream 클래스와 이를 상속하는 서브 클래스
      • 클래스의 기본 기능을 가진 객체를 감싸고 추가적인 기능을 제공하는 클래스를 만들어 내는 방식으로 동작
    • BufferedInputStream, BufferewdOutputStream
      • 기본적인 입력 및 출력 스트림을 감싸고, 버퍼링 기능을 추가
    • DataInputStream, DataOutputStream
      • 기본 스트림을 감싸고, 기본 타입 데이터를 읽고 쓰는 데 도움을 주는 기능을 추가
  • 예시 코드
    • Component : FileReader
    • ConcreteComponet : SimpleFileReader
    • Decorator : bufferedFileReader
    • ConcreteDecorator : bufferedFileReader
    // 파일로부터 데이터를 읽는 FileReader 객체 생성
    FileReader fileReader = new SimpleFileReader("input.txt");
    // 파일로부터 데이터를 읽는 FileReader 객체에 버퍼링 기능을 추가한 BufferedFileReader 객체 생성
    FileReader bufferedFileReader = new BufferedFileReader(fileReader);
    // 버퍼링된 기능을 가진 FileReader 객체를 사용하여 데이터를 읽음
    String content = bufferedFileReader.read();
    System.out.println("File content:\n" + content);

728x90

'JAVA' 카테고리의 다른 글

멀티 스레드  (2) 2024.04.27
java.io 패키지  (0) 2024.04.27
컬렉션 프레임워크  (1) 2024.04.27
제네릭  (1) 2024.04.26
java.lang과 java.util 패키지  (0) 2024.04.26