[패스트캠퍼스] [ Spring MVC part.1 ] 나도 할 수 있는 Java&Spring 웹 개발 종합반 89강

2024. 5. 22. 22:12나도 할 수 있는 Java&Spring 웹 개발 종합반

728x90
반응형

 

java.exe -> 자바 인터프리터

자바 인터프리터가 메인메서드를 호출

호출할 수 있는 이유 : main()이 static이라서

 

톰캣 -> WAS

브라우저 + WAS -> 원격프로그램 실행

톰캣 : 요청을 받아서 프로그램을 실행

 

Q. 외부에서 브라우저로 서버에 있는 프로그램을 실행하려면?

1. 프로그램 등록 (외부에서 호출할 수 있게)

2. url과 프로그램을 연결

 

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller //1. 프로그램 등록
public class ch2 {
    @RequestMapping("/hello") //2. url(/hello)과 main() 연결
    public static void main(String[] args) {
        System.out.println("Hello");
    }
}

 

main() -> 인스턴스 메서드 .. 객체 생성 후 호출 가능 .. 중간에서 누군가 객체 생성을 해준다

누군가 -> 톰캣 내부

 

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

// 1. 원격 가능한 프로그램으로 등록
@Controller
public class Hello {
	int iv = 10; // 인스턴스 변수
	static int cv = 20; // static 변수
	
	// 2. url과 메서드를 연결
	@RequestMapping("/hello")
	public static void main() { // 인스턴스 메서드 - iv, cv 사용가능
		System.out.println("Hello");
		System.out.println(cv); // OK
		System.out.println(iv); // OK
	}
	
	public static void main2() { // static 메서드 - cv만 사용가능
		System.out.println(cv);
		System.out.println(iv); // 에러
	}

}

 

private static void main() 가능 -> 접근 제어자 상관 없이 외부에서 호출할 수만 있게 되어있다

 

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

 

import java.lang.reflect.Method;

public class Main {
	public static void main(String[] args) throws Exception {
	//		public static void main() {
	//		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);
		
		main.invoke(hello); //hello.main()
	}

}
728x90
반응형