본문 바로가기
카테고리 없음

Reflection, 프론트 컨트롤러 패턴, DI

by 문자메일 2022. 9. 10.
  • 메소드 영역에 로드되어 있는 클래스 타입의 객체를 통해 필드/메서드/생성자를 접근 제어자와 상관 없이 사용할 수 있도록 지원하는 API
  • 컴파일 시점이 아닌 런타임 시점에 동적으로 특정 클래스의 정보를 추출해낼 수 있는 프로그래밍 기법
  • 주로 프레임워크 또는 라이브러리 개발 시 사용됨

Reflection 사용하는 프레임워크/라이브러리 소개

  • Spring 프레임워크 (ex. DI)
  • Test 프레임워크 (ex. Junit)
  • JSON Serialization/Deserialization 라이브러리(ex. Jackson)
  • 기타

 

프런트 컨트롤러 패턴

  • 모든 요청을 단인 handler(처리기)에서 처리하도록 하는 패턴
  • 스프링 웹 MVC 프레임워크의 DispatcherServlet(프런트 컨트롤러 역할)이 프런트 컨트롤러 패턴으로 구현되어 있다.

 

Forward

  • 서블릿에서 클라이언트를 거치지 않고 바로 다른 서블릿에게 요청하는 방식
  • Forward 방식은 서버 내부에서 일어나는 요청이기 때문에 HttpServletRequest, HttpServletResponse 객체가 새롭게 생성되지 않음(공유된다)
  • RequestDispatcher dispatcher = request.getRequestDispatcher("포워드 할 서블릿 또는 JSP")
    dispatcher.forwatrd(request, response)

Redirect

  • 서블릿이 클라이언트(웹 브라우저)를 다시 거쳐서 다른 서블릿에게 요청하는 방식
  • Redirect 방식은 클라이언트로부터 새로운 요청이기 때문에 새로운 HttpServletRequest, HttpServletResponse 객체가 생성됨
  • HttpServletResponse 객체의 sendRedirect() 이용

 

 

DI

  • 의존성 주입
    • 한 객체가 다른 객체를 사용할 때 의존성이 있다고 함
    •  

  • 런타임 시 의존 관계를 맺는 대상을 외부에서 결정하고 주입해 주는 것
  • 스프링 프레임워크는 DI 기능을 지원해주는 프레임워크

 

DI 장점

  • 의존선 주입을 인터페이스 기반으로 설계하면, 코드가 유연해짐
    • 느슨한 결합도(loose coupling)
  • 변경에 유연함
    • 결합도가 낮은 객체끼리는 변경에 용이함

댓글