Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[MVC 구현하기 - 1단계] 오잉(이하늘) 미션 제출합니다. #419

Merged
merged 5 commits into from
Sep 14, 2023

Conversation

hanueleee
Copy link

@hanueleee hanueleee commented Sep 14, 2023

안녕하세요 테오!
선릉은 어떤가요 잘 지내고 계신가요?😋
이번 MVC 구현 미션을 교수님과 함께하게 되어 굉장히 기쁩니다ㅎㅎㅎ 잘 부탁드려요!!

이번 단계에 구현한 기능은 다음과 같습니다.

  1. AnnotationHandlerMapping의 initialize 메소드
  • @Controller 가 달려있는 모든 클래스를 읽어온다.
  • 해당 클래스의 모든 메소드를 읽어와서 그 중 @RequestMapping이 달려있는 메소드를 대상으로 HandlerExecutions를 더해준다.
  1. AnnotationHandlerMapping의 getHandler 메소드
  • request의 uri와 method에 따라 적절한 HandlerExecution을 반환한다.

@hanueleee hanueleee self-assigned this Sep 14, 2023
Copy link
Member

@woosung1223 woosung1223 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

안녕하세요 오잉!! 오랜만이네요

step1 진행하느라 고생하셨습니다 😃

딱히 리뷰 남길 부분 없이 깔끔하게 짜주셨네요 👍
다음 단계는 또 얼마나 잘 짜오실지 기대가 됩니다..

고생하셨습니다! 다음 단계 진행해주세요!

@@ -19,11 +26,37 @@ public AnnotationHandlerMapping(final Object... basePackage) {
this.handlerExecutions = new HashMap<>();
}

public void initialize() {
public void initialize()
throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

checked Exception을 시그니처에 명시해주셨군요!

다만 이렇게 checked Exception을 명시하는 경우에는 처리를 메소드를 호출하는 쪽에서 담당하게 될 것 같아요.

발생하는 예외들은 모두 Reflection 관련 checked Excpetion이고, 외부에서 catch 구문을 통해 따로 무언가 처리를 해주기가 어려울 것 같다는 생각이 들어요!

따라서 리플렉션을 사용하는 부분(예외가 발생할 수 있는 지점)에서 try-catch로 감싸주는 건 어떨까요?

Copy link
Author

@hanueleee hanueleee Sep 18, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

맞습니다..
저도 checked exception을 메소드 시그니처에 명시할지, 해당 부분에서 try-catch해버릴지 고민하다가
예외 구조를 어떻게 잡아야할지 모르겠어서 우선 메소드 시그니처에 두고 넘어갔는데요..!!

테오 말씀처럼 전부 Reflection관련 예외이기 때문에 해당 지점에서 처리를 해주는게 맞다는 생각이 들어요!
우선 try-catch로 감싸도록 수정했습니다. 감사합니다!

Set<Class<?>> controllers = reflections.getTypesAnnotatedWith(Controller.class);
for (Class<?> controller : controllers) {
Object instance = controller.getDeclaredConstructor().newInstance();
Method[] methods = controller.getDeclaredMethods();
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

declared를 붙이는 것과 붙이지 않는 것은 어떤 차이가 있을까요?

추가로, declared를 붙임에도 어떤 메소드가 추출되는지 확인해보면 저희가 구현하지도 않은 $jacocoinit 메소드가 나옵니다.

이는 synthetic과 관련된 개념인데, 한 번 아래 아티클 읽어보시면 좋을 것 같아요 😄

declared를 붙인다고 해서 반드시 저희가 직접 정의한 메소드만 나오지는 않는 것 같더라구요!

관련한 스택오버플로우 질문
synthetic이란?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

getXXX()

  • 상속받은 클래스와 인터페이스를 포함하여 모든 public 요소를 가져온다.
  • 예를들어, getMethods() 는 해당 클래스가 상속받은 그리고 구현한 인터페이스에 대한 모든 public 메소드를 가져온다.

getDeclaredXXX()

  • 상속받은 클래스와 인터페이스를 제외하고 해당 클래스에 직접 정의된 내용만 가져온다.
  • 또한 접근 제어자와 상관없이 요소에 접근할 수 있다.
  • 예를 들어 getDeclaredMethods() 는 해당 클래스에만 직접 정의된 private, protected, public 메소드를 전부 가져온다.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Synthetic constructs are classes, fields, methods and so on that are created by the Java compiler. They do not directly correspond to something in the source code.

image

syntetic이라는 개념을 처음들어봐요!
신기하네요.. 😲
감사합니다!

@woosung1223 woosung1223 merged commit 0c7eb8c into woowacourse:hanueleee Sep 14, 2023
1 check failed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants