라우터 - locator - controller 관계
라우터는 locator를 객체화 시키고 (싱글톤)
locator에서 재정의한 find 메서드를 실행시킨다.
find 메서드는 controller 객체를 반환하며,
하위 enum의 상수에 따라서
switch문으로 controller를 객체화 한다.
controllers는 해쉬맵형태의 객체이다.
.get(menu) 를 함으로써 저장되어있는 Controller 객체를 가져올 수 있다.
controller객체를 생성하고 해쉬맵의 Controller 객체를 담는 곳에 담는다. (menu도)
그리고 반환한다.
여기까지가 router에서 실행한 find 메서드를 호출하는 과정이다.
이렇게 controller를 반환받고
해당 controller.run을 실행한다.
(하위 메뉴를 구성할 것이 아니라면 locater를 안 써도됨.)
위 방식으로 각 메뉴의 locater를 모두 객체화 한후
해당 locater의 find 메서드를 실행하여 controller 객체를 배정한 것과 달리,
MainControllerLocator 한 개의 클래스만 객체화 한다.
이런 식으로 싱글톤 패턴으로 controller 객체를 생성한다.
그후 controller 객체를 반환하며 MainRouter에서 해당 객체를 사용하여 run()을 실행한다.