자바에서 리플렉션(Reflection)이 뭔가요?
조회수 4878회
구글링을 하다가 Reflection 기법이라는 것을 보았는데 제 머리로는 잘 이해가 가질 않습니다. reflection의 개념과 이해에 도움이 될만한 간단한 예제 좀 보여주실수있나요?
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
리플렉션은 클래스를 조사하는데 쓰입니다. 특정 형식(리턴타입, 매개변수)의 메소드가 있는지, 필드들은 어떤걸 가지고 있는지, private인지 public인지를 얻어올 수 있습니다.
저는 특정 메소드가 내가 정한 어노테이션을 쓰는지 볼 때 리플렉션을 써 봤는데요. 다음 코드와 같이 @RunTwice라는 리플렉션을 만들고 그 리플렉션을 가진 메소드만 골라서 2번씩 실행시켜줄 수 있어요. @RunTwice를 method1~3사이에 아무거나 붙여주고 실행해 보세요.
import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.reflect.*; class Solution { public static void main(String[] args) { Solution solution = new Solution(); //Solution클래스의 모든 메소드를 읽어와서 조사하기 Method[] methods = solution.getClass().getDeclaredMethods(); for(Method method : methods){ if(method.isAnnotationPresent(RunTwice.class)){ try{ //이름대로 2번 실행해주기. method.invoke(solution); method.invoke(solution); } catch(Exception e){ e.printStackTrace(); } } } } @RunTwice public void method1(){ System.out.println("메소드 1 입니다."); } public void method2(){ System.out.println("메소드 2 입니다."); } public void method3(){ System.out.println("메소드 3 입니다."); } } //RunTwice라는 어노테이션을 만들기 @Retention(RetentionPolicy.RUNTIME) @interface RunTwice{ }
댓글 입력