반응형
Java 실행 프로그램은 반드시 class 블록과 main() 메소드 블록으로 구성되어야 한다.
메소드 블록은 단독으로 작성될 수 없고 항상 클래스 블록 내부에 작성되어야 한다.
다음은 "Hello World" 문자열을 출력하는 코드이다.
public class Hello{
public static void main(String[] args){
System.out.println("Hello World");
}
}
class 이름은 개발자가 마음대로 정할 수 있다.
하지만 main() 메소드는 java에서 JVM(Java Virtual Machine)을 구동시키면 가장 먼저 찾아서 실행시키는 entry point역할을 하는 메소드이기 때문에 이름을 마음대로 바꾸면 안 된다.
main() 메소드의 구문은 언제나 동일하다.
public static void main(String[] args)
유일하게 바꿀 수 있는 것이 있다면
- 메소드의 변숫값으로 설정된 String 배열의 이름.(args -> stringArgs)
- String배열 선언 방식.(String args []도 가능)
메소드에 사용된 코드를 하나씩 뜯어보자.
public
- 메소드의 접근 제어자(access modifier)이다.
- main() 메소드의 접근 제어자는 반드시 public 이어야 한다. 그래야만 자바 런타임이 이 메소드를 실행시킬 수 있다.
- public은 '어디에서나'라는 의미로 해석된다. 따라서 JVM은 main() 메소드의 위치에 구애받지 않고 접근 가능하다.
만약 아래와 같이 접근 제어자를 사용하지 않고 main() 메소드를 정의했다면 에러가 발생한다.
public class Hello{
static void main(String[] args){
System.out.println("Hello World");
}
}
$ javac Hello.java
$ java Hello
Error: Main method not found in class Hello, please define the main method as:
public static void main(String[] args)
or a JavaFX application class must extend javafx.application.Application
$
static
자바에서는 static(정적) 선언을 해주면 프로그램 실행 시 객체를 생성해주지 않아도 자동으로 메모리에 로드된다. main() 메소드의 경우 객체 생성 없이 실행되어야 하기 때문에 static을 붙여줘야 한다.
main() 메소드가 실행되기 위해서는 프로그램 시작 전 메모리에 미리 로드되어 있어야 한다. static 선언을 해주면 프로그램 시작 전 static 선언된 것들을 1순위로 메모리에 올려서 프로그램을 실행시킨다. 프로그램 실행 후 메모리 내에서 main이라는 이름의 메소드를 찾아서 호출한다.
void
자바에서 모든 메소드는 리턴 타입을 설정하도록 되어있다.main() 메소드는 아무것도 리턴하지 않는다. 그래서 리턴 타입이 void이다.
String[] args
자바의 main() 메소드는 String 배열 타입의 매개변수를 갖는다.
말 그대로 String 타입의 배열을 매개변수로 가진다는 말인데, 구글링 결과 프로그램 실행 시 외부 값을 가져와서 사용하기 위해 메모리에 저장 공간을 미리 선언해 두는 것이라고 한다.
관련 내용에 대해서 좀 더 자세히 찾아봐야겠다.
참고
반응형
'Programming > Java' 카테고리의 다른 글
[Java] for문 동작 순서 (0) | 2021.09.25 |
---|---|
[Java] 클래스 생성자 선언 시 사용되는 this와 this() (0) | 2021.09.16 |
[Java] 기본 데이터 타입(Primitive Data Types) (0) | 2021.09.07 |
[Java] 자바 표준 입출력 제어 (0) | 2021.09.04 |
[Java] 이스케이프 문자 (0) | 2021.09.04 |