본문 바로가기
프로젝트/자바 리플렉션

[자바 리플렉션] 1. 리플렉션을 왜 사용해야할까?

by dantriss 2023. 8. 11.

본격 자기계발 레벨업 프로젝트! 유튜브 메타코딩 영상을 보면서 공부 했던것을 정리하고자 합니다.

IDE : STS4

언어 : Java 8

스프링부트 버전 : 2.7.13

DB : MySQL

빌드관리 도구 : Maven

OS : iOS

참고유튜브 : 메타코딩


리플렉션을 왜 사용해야할까 ?

그 이유에 대해서 사용하지 않는다면 어떻게 우리가 코드를 작성하는지 한번 알아보자

 

우선 패키지를 생성 한 후 dispatcher 라는 클래스명으로 클래스를 생성해준다.

 

dispatcher 클래스를 생성하면 Filter 클래스를 상속받아준다.

javax.servlet 을 선택해주어야 한다.

그 후 filter 클래스가 가지고 있는 메서드를 오버라이드 해준다.

잘 작동하는지 확인해보기 위해 콘솔에 찍어보면

 

잘 동작하는걸 확인할 수 있다.

 

요청받은 주소를 확인해보기 위해 매개변수로 받는 request 를 형 변환 후 req에 담아주고 해당 요청에서

컨텍스트 주소, 식별자 주소, 전체주소를 한번 출력해보자

 

HttpServletRequest req = (HttpServletRequest) request; 
		HttpServletResponse res = (HttpServletResponse) response; 
		
		System.out.println("컨텍스트주소 : "+req.getContextPath());
		System.out.println("식별자주소 : "+req.getRequestURI());	
		System.out.println("전체주소 : "+req.getRequestURL());

 

다시 서버를 재실행해서 확인해보면 서버 주소를 받아와서 아래와 같이 출력되는걸 확인 할 수 있다.

 

해당 전체 주소에서 user를 파싱해보기위해서 식별자 주소에서 컨텍스트주소를 빈칸으로 변환해주어서 endPoint변수명으로 출력을 해보면

String endPoint = req.getRequestURI().replaceAll(req.getContextPath(),"");
		 System.out.println("endpoint : "+endPoint);

 

/user가 파싱이 되는것을 확인할 수 있다.

 

이제 필터에서 한번 걸러져서 필요한 컨트롤러로 응답해주는 기능을 작성해보기 위해서 controller 패키지 생성 후 userController를 생성해준다.

userController에 join과 login 함수를 작성해주고 각각 출력이 되는지 확인해보자

 

dispatcher에서 userController를 선언/초기화를 해서 메모리에 올린 후

주소에서 파싱한 글자가 /join이라면 userController에 join 함수를 /login이라면 login함수를 동작시킨다.

 

서버를 실행시켜 주소창에 /login, /join을 마지막에 넣어서 동작을 시켜보면 각각의 함수들이 동작하는걸 확인할 수 있다.

 

여기서 새로운 함수를 만들어서 추가를 해줘야하는 상황이라면? 그에 상응하는 부분을 필터에 추가를 해줘야 하기 때문에

상당한 디메리트가 있기 때문에 이를 해결해주기 위해서 리플렉션을 사용해주어야 한다.

새로운 test 함수가 생기면 필터부분에 기능을 추가해줘야 한다.

댓글