BASHA TECH

this.getclass().getmethod 본문

Computer/JSP

this.getclass().getmethod

Basha 2022. 9. 1. 22:48
728x90

클래스("getClass"로 가져온 "Class<?>")의 "getMethod"메서드는 메서드 명과 파라미터 타입 배열(Class<?>[] parameterTypes)로 구성된 메서드를 클래스에서 찾아서 메서드 객체(java.lang.reflect.Method)를 넘겨줍니다.

getMethod(String name, Class<?>... parameterTypes) or getMethod(String name)

"name"은 메서드 명입니다. "parameterTypes"는 클래스(java.lang.Class)로된 구성된 배열입니다. 파라미터가 없으면 입력하지 않습니다. 클래스에 ".class"를 사용하면 클래스의 패키지명과 클래스 명으로 구성된 클래스(Class<>)를 가져옵니다.

https://carrotweb.tistory.com/56

 

자바 리플렉션 메서드 동적 실행 - Java Reflection Method invoke, 이클립스(Eclipse)

클래스("getClass"로 가져온 "Class<?>")의 "getMethod"메서드는 메서드 명과 파라미터 타입 배열(Class<?>[] parameterTypes)로 구성된 메서드를 클래스에서 찾아서 메서드 객체(java.lang.reflect.Method)를 넘..

carrotweb.tistory.com

이건 자바 클래스 동적 로딩에 대한 추가 설명

https://carrotweb.tistory.com/53

 

getmethod에 대해 자료를 찾아보던 중 이런 것이 나옴. . . 

cf. 참고: 

reflection을 이용해서 method를 호출하기 = > 이게 뭐지. . . ? ask!

reflection이란, 리플렉션은 구체적인 클래스 타입을 알지 못해도, 그 클래스의 메소드, 타입, 변수들에 접근할 수 있도록 해주는 자바 API.

실제로 자바는 정적인 언어라 구체적인 클래스 타입을 알지 못하면 호출하여 실행하기 어려운 부분이 많은데, 이러한 동적인 문제를 해결해주기 위한 것이 Reflection.

주로, 프레임워크나 IDE 나 Library 에서 정의되어있는 메서드나 클래스의 종료를 가져오거나, 호출하기 위해서 사용된다.

대표적인 사용 예로는 스프링의 DI (dependency Injection) 이나 Proxy, IDE 에서 정의된 메서드를 가져오거나 할 때 사용됨.

1. Object instance = FirstService firstService;
2. Class<?> firstClass = instance.getClass();
3. Method method = firstClass.getDeclaredMethod(methodName, firstDto.getClass());
4. Object result = method.invoke(instance, parameter);
  
// 1. Object instance = FirstService firstService;
실제 호출하고자 하는 instance 를 가져옵니다.
// 2. Class<?> firstClass = instance.getClass();
instance 의 Class 를 getClass() 메서드를 통해 추출합니다.
// 3. Method method = firstClass.getDeclaredMethod(methodName, firstDto.getClass());
getDeclaredMethod 를 이용하여 firstClass 의 선언되어있는 methodName 과 firstDto Class 의 parameter 를 가진 method 를 가져옵니다.
reflection 을 이용하여 method 를 가져오는 방법은 2가지가 있습니다. getMethod() 와 getDeclaredMethod() 가 있습니다.

이 2가지의 차이점은

getMethod() 는 public method 뿐만아니라 base class 의 상속되어있는 superclasses 와 superinterface 의 메서드 전부를 가져오고,

getDeclaredMethod() 는 해당 클래스에만 선언된 method 를 가져옵니다.

따라서, 필요에 따라 구분해서 사용해야 합니다.

// 4. Object result = method.invoke(instance, parameter);
추출한 method 의 invoke() 를 사용하여 실행시킵니다. Object 를 return 하기 때문에 return 타입에 맞춰 형변환하여 사용하면 됩니다.

https://sanghye.tistory.com/31

 

[JAVA] Reflection 을 이용하여 Method 호출하기

2개의 DB Connection Pool 을 사용하는 서비스를 개발하던 중 분리된 DB 의 Mapper 를 구분해서 호출해야 하는 이슈가 있었습니다. 문제는 2개의 Mapper 형태가 거의 유사하다는 점이었습니다. 매 서비스가

sanghye.tistory.com

 

728x90
반응형

'Computer > JSP' 카테고리의 다른 글

프록시 패턴(Proxy Pattern)  (0) 2022.09.07
AOP & Filter & Listener  (0) 2022.09.05
Redirect  (0) 2022.09.01
startsWith/endsWith 특정 문자로 시작하거나 끝나는지 체크  (0) 2022.09.01
annotation이 java코드로 바뀌는 원리  (0) 2022.09.01
Comments