2021.12.11_테코레이터패턴04.자바와스프링에서찾아보는패턴
본문 바로가기
CS Study/디자인패턴

2021.12.11_테코레이터패턴04.자바와스프링에서찾아보는패턴

by KyeongMin 2021. 12. 11.
728x90
반응형

Java

import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponseWrapper;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class DecoratorInJava {

    public static void main(String[] args) {
        // Collections가 제공하는 데코레이터 메소드
        ArrayList list = new ArrayList<>();
        list.add(new Book());

        List books = Collections.checkedList(list, Book.class);


//        books.add(new Item());

        List unmodifiableList = Collections.unmodifiableList(list);
        list.add(new Item());
        unmodifiableList.add(new Book());


        // 서블릿 요청 또는 응답 랩퍼
        HttpServletRequestWrapper requestWrapper;
        HttpServletResponseWrapper responseWrapper;
    }

    private static class Book {

    }

    private static class Item {

    }
}
  • 타입 체크를 해주는 것들
  • 어댑터패턴도 어찌보면 데코레이터임
  • 현재 books.add(new Item()); 이렇게만 하면 에러 생김 타입을 체크하기 때문에
  • unmodifiavleLsit()있고,
  • 서블릿에서 있는것도 일종의 데코레이터...

Spring

import org.springframework.beans.factory.xml.BeanDefinitionDecorator;
import org.springframework.http.server.reactive.ServerHttpRequestDecorator;
import org.springframework.http.server.reactive.ServerHttpResponseDecorator;
import org.springframework.web.server.WebFilter;

public class DecoratorInSpring {

    public static void main(String[] args) {
        // 빈 설정 데코레이터
        BeanDefinitionDecorator decorator;

        // 웹플럭스 HTTP 요청 /응답 데코레이터
        ServerHttpRequestDecorator httpRequestDecorator;
        ServerHttpResponseDecorator httpResponseDecorator;
    }
}
  • 빈 설정은 거의 쓸일 없고
  • 웹플럭스는 사용함
    • 웹필터를 상속해서 만들어서 감싸서 담아주는 것인데
    • 우리가 만든 하위 클래스로 가서 처리를 할 수 있음
  • WebFilter도 비슷하게 사용함

https://github.com/3DPIT/study/blob/master/05.%EC%BD%94%EB%94%A9%EC%9C%BC%EB%A1%9C%ED%95%99%EC%8A%B5%ED%95%98%EB%8A%94GoF%EC%9D%98%EB%94%94%EC%9E%90%EC%9D%B8%ED%8C%A8%ED%84%B4/02.%EA%B5%AC%EC%A1%B0%EA%B4%80%EB%A0%A8%EB%94%94%EC%9E%90%EC%9D%B8%ED%8C%A8%ED%84%B4/%EB%8D%B0%EC%BD%94%EB%A0%88%EC%9D%B4%ED%84%B0%ED%8C%A8%ED%84%B4/2021/1211/04.%EC%9E%90%EB%B0%94%EC%99%80%EC%8A%A4%ED%94%84%EB%A7%81%EC%97%90%EC%84%9C%EC%B0%BE%EC%95%84%EB%B3%B4%EB%8A%94%ED%8C%A8%ED%84%B4/2021.12.11_%ED%85%8C%EC%BD%94%EB%A0%88%EC%9D%B4%ED%84%B0%ED%8C%A8%ED%84%B404.%EC%9E%90%EB%B0%94%EC%99%80%EC%8A%A4%ED%94%84%EB%A7%81%EC%97%90%EC%84%9C%EC%B0%BE%EC%95%84%EB%B3%B4%EB%8A%94%ED%8C%A8%ED%84%B4.md

 

GitHub - 3DPIT/study

Contribute to 3DPIT/study development by creating an account on GitHub.

github.com

 

 

728x90
반응형

댓글