리플렉션 API / Front Controller 패턴 / DI(의존성 주입)

BRINCE·2022년 10월 3일
0

스프링 스터디

목록 보기
6/10

리플렉션 API 개념 소개

Reflection

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

리플렉션을 사용하는 프레임워크/라이브러리

  • 스프링 프레임워크
  • 테스트 프레임워크 (JUnit)
  • JSON Serialization/Deserialization 라이브러리 (Jackson)

프런트 컨트롤러 패턴

  • 모든 요청을 단일 handler(처리기)에서 처리하도록 하는 패턴 (중앙 집중시 요청 처리 메커니즘을 갖고 있다.)
  • 스프링 웹 mvc 프레임워크의 디스패처 서블릿이 프론트 컨트롤러 역할을 하고 있다.

모든 요청 → 디스패처 서블릿 → 컨트롤러

                                         → 컨트롤러

                                         → 컨트롤러

Foward vs Redirect

Forward

  • 서블릿에서 클라이언트(웹 브라우저) 를 거치지 않고, 다른 서블릿(또는 JSP)에게 요청하는 방식

  • Forward 방식은 서버 내부에서 일어나는 요청이기 때문에 기존에 생성된 HTTP 서블릿 리퀘스트와 리스폰스 객체가 새롭게 생성되는지 않고 기존의 것이 공유된다 .

  • RequestDispatcher dispatcher = request.getRequestDispatcher("포워드할 서블릿 또는 JSP")

     `dispatcher.forward(request,response)`

Redirect

  • 서블릿이 웹 브라우저를 다시 거쳐 다른 서블릿 또는 JSP에게 요청하는 방식
  • 웹 브라우저를 다시 거쳐서 요청이 들어오기 때문에 URL주소가 달라진다.
  • 새로운 Http Servlet Request/Response 객체 가 생성된다.
  • HttpServletResponse 객체의 sendRedirect() 이용

DI (Dependency Injection)

  • 의존성 주입
    • 한 객체가 다른 객체를 사용할 때 의존성이 있다고 한다.
    • 중간에 인터페이스를 두어서 인터페이스 구현 클래스와의 결합도가 느슨해지도록 하여 변화에 영향을 덜 받게 하도록 설계한다.
  • 런타임 시 의존 관계를 맺는 대상을 외부에서 결정하고 주입해 주는 것
  • 스프링 프레임워크는 DI기능을 지원해주는 프레임워크이다.

DI의 장점

  • 의존성 주입을 인터페이스 기반으로 설계하면, 코드가 유연해진다.
    • 느슨한 결합도 (loose coupling)
  • 변경에 유연해진다.
    • 결합도가 낮은 객체끼리는 부품을 쉽게 갈아끼울 수 있다.
profile
자스코드훔쳐보는변태

0개의 댓글