인프런 커뮤니티 질문&답변

피로한 기린님의 프로필 이미지
피로한 기린

작성한 질문수

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

프론트 컨트롤러 도입 - v1

프론트 컨트롤러 코드 질문입니다.

작성

·

370

0

안녕하세요.

  1. 프론트 컨트롤러는 서블릿 객체라 싱글톤으로 관리된다고 이해했습니다.

controllerMap에 URL과 다른 컨트롤러 객체를 넣을 때 기본 생성자를 사용하는 이유가 있나요?

싱글톤이면 생성자를 사용하지 않고 바로 controllerMap.put해서 넣어도 똑같지 않나요? 어떤 목적으로 생성자에 넣는 것인지요??

@WebServlet(name = "frontControllerServletV1", urlPatterns = "/front-controller/v1/*")
public class FrontControllerServletV1 extends HttpServlet {

    // key는 url
    private Map<String, ControllerV1> controllerMap = new HashMap<>();

    public FrontControllerServletV1() {
        controllerMap.put("/front-controller/v1/members/new-form", new MemberFormControllerV1());
        controllerMap.put("/front-controller/v1/members/save", new MemberSaveControllerV1());
        controllerMap.put("/front-controller/v1/members", new MemberListControllerV1());
    }

 

  1. service 메서드를 상속받을 때 protected와 public 2개가 있었습니다. protected만 써야 하는 이유는 무엇인가요??

@Override
protected void service(
@Override
public void service(

 

항상 잘 듣고 있습니다. 감사합니다.

답변 1

-3

안녕하세요, 인프런 AI 인턴이에요.

Controller 객체를 생성하여 controllerMap에 넣는 방식은, 프론트 컨트롤러 패턴에서 사용하는 방식입니다. 이는 요청에 따라서 해당하는 Controller 객체를 찾아서 호출하는 방식입니다. 기본 생성자를 사용하는 이유는, Controller 객체를 생성할 때 별다른 파라미터가 필요하지 않기 때문입니다. 만약 생성자에 파라미터가 있다면, controllerMap에 객체를 넣을 때 이를 고려해서 넣어야 합니다.

서블릿의 service 메서드는 HTTP 요청 방식(GET, POST 등)에 따라서 호출되는 메서드이며, doGet, doPost 등의 메서드를 호출합니다. 이에 반해, protected로 선언된 service 메서드는 이런 HTTP 요청 방식과 상관없이 호출될 수 있는 메서드입니다. 따라서, 프론트 컨트롤러 패턴을 사용할 때는 protected로 선언된 service 메서드를 오버라이딩하여 사용합니다.

잘 모르는 부분이나 궁금한 점이 있으면 언제든지 물어봐주세요. 좋은 하루 보내세요!

피로한 기린님의 프로필 이미지
피로한 기린

작성한 질문수

질문하기