Spring

3. 원격 프로그램의 실행 - 패스트캠퍼스 백엔드 부트캠프 3기

gkss2tpt 2025. 1. 31. 12:23

1. 프로그램 등록

2. URL과 프로그램을 연결

@Controller	// 1. 프로그램 등록
public class Hello {
    int iv = 10;		// 인스턴스 변수
    static int cv = 20;	// static변수
    
    @RequestMapping("/hello")	// 2. URL과 main()을 연결
    public void main() {		// 인스턴스 메서드 - iv, cv 둘다 사용가능
        System.out.println("Hello");
        System.out.println(cv);
        System.out.println(iv);
    }
    
    public static void main2() {	// static메서드 - cv만 사용가능
    	System.out.println(cv);	// OK
        System.out.println(iv);	// 에러
    }
}
  • Run on Server를 해주면 다음과 같이 나오는데 브라우저에 출력할게 없어서 그렇다.

  • public void main()이 static이 아니어도 되는 이유 : 톰캣이 객체 생성을 해주기 때문
@Controller	// 1. 프로그램 등록
public class Hello {
    int iv = 10;		// 인스턴스 변수
    static int cv = 20;	// static변수
    
    @RequestMapping("/hello")	// 2. URL과 main()을 연결
    private void main() {		// 인스턴스 메서드 - iv, cv 둘다 사용가능
        System.out.println("Hello - private");
        System.out.println(cv);
        System.out.println(iv);
    }
    
    public static void main2() {	// static메서드 - cv만 사용가능
    	System.out.println(cv);	// OK
        System.out.println(iv);	// 에러
    }
}
  • Reflection API 사용
import java.lang.reflect.Method;

public class Main {
	public static void main(String[] args) throws Exception{
//		Hello hello = new Hello();
//		hello.main();	// private이라서 외부 호출 불가
		
		// Reflection API를 사용 - 클래스 정보를 얻고 다룰 수 있는 강력한 기능제공
		// java.lang.reflect패키지를 제공
		// Hello클래스의 Class객체(클래스의 정보를 담고 있는 객체)를 얻어온다.
		Class helloClass = Class.forName("com.fastcampus.ch2.Hello");
		Hello hello = (Hello)helloClass.newInstance();	// Class객체가 가진 정보로 객체 생성
		Method main = helloClass.getDeclaredMethod("main");
		main.setAccessible(true); // private인 main()을 호출가능하게 한다.
		
		main.invoke(hello);	// hello.main()
	}
}