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 |