본문 바로가기
IT/Spring

STS | private에 있는 정보 가져오기 "Reflection API "

by so_o 2023. 4. 20.

 

com.sotiger.test2 패키지 안에

Hello 클래스 파일과

Main 클래스가 있다.

 

 

Hello 클래스

main 메서드를 생성하고 접근 제한자를 private로 만들었다.

이 main메서드를 Main 클래스에서 호출할 수 있을까?

package com.sotiger.test2;

@Contller
public class Hello{
	int iv = 10;	// 인스턴스 변수
    int static cv = 10;		// static 변수 > static 메서드에서만 사용 가능
    
	private void main() {
    	System.out.println("Hello");
    }
}

 

 

Main 클래스

Hello 클래스에서 생성한 main 메서드를 호출해보았다.

private라서 외부 호출이 불가능했다.

package com.sotiger.test2

public class Main{
	public static void main(String[] args) {
    	Hello hello = new Hello();
        hello.main();	// private라서 외부 호출 불가능
    }
}

 

 

 

 

 

방법 : reflect 사용

 

 

Reflection API  - 클래스 정보를 얻고 다룰 수 있는 기능을 제공

Spring 프레임워크에서 많이 다룬다고 한다.

 

작성하는 방법은 아래와 같다.

 

Main 클래스

package com.sotiger.test2

import java.lang.reflect.Method;

public static void Main(String[] args) {

    // Hello 클래스의 Class(클래스의 정보를 담고있는 객체)객체를 얻어온다
    Class helloClass = Class.forName("com.sotiger.test2.Hello");	
    
    // Class객체가 가진 정보로 객체 생성
    Hello hello = (Hello) helloClass.newInstance();
    
    Main main = helloClass.getDeclaredMethod("main");
    main.setAccessible(true);   // private인 main()을 호출가능하게 한다.
    hello.invoke(main);		// hello.main() 실행
}

'IT > Spring' 카테고리의 다른 글

HttpServletRequest 메서드  (0) 2023.04.22
STS | web Browser 변경  (0) 2023.04.19