티스토리 뷰
Study/FastCampus
[Java Project] Part 1. 나만의 MVC 프레임워크 만들기 - Reflaction 및 Spring MVC와 비교하기
코딩하는 앤지 2023. 8. 21.728x90
반응형
1. Reflection
- 힙 영역(메모리)에 로드되어 있는 클래스 타입의 객체를 통해 필드, 메소드, 생성자를 접근 제어자(private, public 등)와 상관없이 접근할 수 있도록 지원하는 API이다.
- 이미 로드되어 있는 클래스 타입의 객체(User)를 가져오는 방법은 세 가지가 있다.
- Class.class
- Instance.getClass()
- Class.forName()
- 이미 로드되어 있는 클래스 타입의 객체(User)를 가져오는 방법은 세 가지가 있다.
// 1
Class<User> clazz1 = User.class;
// 2
User user = new User("userid", "kim");
Class<? extends User> clazz2 = user.getClass();
// 3
Class<?> clazz3 = Class.forName("org.example.User");
- JVM의 클래스 로더는 클래스 파일에 대한 로딩이 끝나면 클래스 타입의 객체를 생성하고, 메모리 힙 영역에 저장한다.
- 컴파일 시점이 아닌 런타임 시점에 동적으로 특정 클래스의 정보를 추출해낼 수 있는 프로그래밍 기법이다.
- 주로 프레임워크 또는 라이브러리 개발 시 사용된다.
- Reflection 사용하는 프레임워크/라이브러리
- Test 프레임워크 (ex. JUnit)
- JSON Serialization/Deserialization 라이브러리 (ex. Jackson)
- Spring 프레임워크 (ex. DI)
2. Reflection 실습
@Controller 애노테이션이 설정돼 있는 모든 클래스를 찾아서 출력한다.
(1) 의존성 추가
implementation('org.reflection:reflections:0.10.2')
(2) 구현 참고사항
- @Trarget({ElemetnType.TYPE}) : class에 어노테이션을 붙이고 싶기 때문에 대상을 TYPE이라 지정한다.
- @Retention(REtentionsPilicy.RUNTIME) : 런타임 기간이 유지기간임을 선언한다.
- 임의의 Controller 클래스를 생성하고 어노테이션으로 @Controller를 붙여준다.
- ReflactionTest : beans에 모든 Controller 클래스를 모아 담을 수 있다.
Public class ReflactionTest {
@Test
void controllerScan() {
Reflections reflections = new Reflections("org.example"); // 스캔 대상 위치
Set<Class<?>> beans = new HashSet<>();
beans.addAll(reflections.getTypesAnnotatedWith(Controller.class));
}
}
3. 구현한 MVC와 Spring MVC 비교
- Spring MVC 프레임워크를 간단하게 구현한 실습을 여태까지 진행하였다.
- SpringFramework에 구현된 DispatcherServlet과 비교해보면 전반적으로 실습한 코드와 유사하게 구현된 것을 볼 수 있다.
- 실습 자체가 Spring MVC 에서 제공하는 플로우를 따라 구현하는 것이었기에 MVC 프레임워크를 이해하는데 도움이 될 것 같다.
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
#패스트캠퍼스 #포트폴리오 #직장인자기계발 #환급챌린지 #포트폴리오챌린지 #패스트캠퍼스후기 #초격차패키지 #오공완
728x90
반응형
'Study > FastCampus' 카테고리의 다른 글
[Java Project] Part 2. 게시판 서비스 만들기 - 프로젝트 기획 및 깃헙 이슈 정리하기 (1) | 2023.08.23 |
---|---|
[Java Project] Part 2. 게시판 서비스 만들기 - 개발 환경 및 개발 목적 (0) | 2023.08.22 |
[Java Project] Part 1. 나만의 MVC 프레임워크 만들기 - DI 프레임워크 (0) | 2023.08.20 |
[Java Project] Part 1. 나만의 MVC 프레임워크 만들기 - MVC 프레임워크 (0) | 2023.08.19 |
[Java Project] Part 1. 나만의 MVC 프레임워크 만들기 - 프런트 컨트롤러 (0) | 2023.08.18 |
댓글