PSVM - public static void main 뭔가요?
public void static main(String[] args)에 대해서 알아보자
public void static main(String[] args)
public void static main(String[] args){ ... }
자바를 제일먼저 실행할때 접하게되는 코드가 위코드다. 기초가 중요한만큼 무슨의미인지
파악하는 시간을 아래순서대로 가져보자.
- public
- void
- static
- main
- String[] args
public
해당 method는 JVM 어느곳에서 접근이 가능해야하기때문에 접근제어자로 public을 사용한다. 만약에 프로그램이 실행될려고 하는데 접근할수 없다면 안되기 때문이다.
void
왜 리턴값이 void
일까? 다른 형을 선언해보면 에러가 나는것을 확인할수 있을것이다.
Error: Main method must return a value of type void in class MainTest, please
define the main method as:
public static void main(String[] args)
왜 에러가 나는것일까? 생각해보면 void
가 아니고 String
이나 다른 type이라고 해보자 의미가 없다. method가 종료되서 리턴값이 있던간에 프로그램은 종료되어있기 때문에 값을 리턴해주더라도 사용할수가 없을뿐더로 사용하지도 못하기 떄문이다.
static
정적이라는 단어로 method 앞에 입력하게되면 정적 mthod 변수앞에 붙이면 정적 변수가 된다. static
으로 선언하게 되면 class loader
에의해서 class가 로딩될때 static로 선언된 자원들을 JVM
의 method area
영역에 저장된다. 그렇다는것은 메모리에 main mehtod가 로드되어 객체를 생성하지 않고 실행되어 작업을 수행할수가 있게된다.
main
이건 자바의 기본메소드이며 고정되어있다. Java프로그램이 시작할때 주요 메소드를 찾으며 찾았을경우 프로그램을 실행하려고 시도하고 찾지 못했다면 다음과 같은 에러를 발생한다.
$ javac Test.java
$ java Test
Error: Main method not found in class Test, please define the main method as:
public static void main(String[] args)
or a JavaFX application class must extend javafx.application.Application
String[] args
Java에서는 기본 메소드에서는 String 배열 유형의 단일 인수를 허용한다. 다른 이름으로는 Java 명령행 인수라고도 하며 명령인수를 통해서 프로그램이 실행할때 명령줄 인수를 전달할수있다.
$ java Test "arthur" "zzang"
arthur
zzang
자바를 사용하면서 너무 쉽게 보구 무심하게 지나갔던 PSVM에 대해서 알아보았다. 이번글을 통해서 한번더 복습하는 계기가되서 좋았고 될수록 기본에 집중하는 시간을 가져 공유하는 자리를 자주 만들어야겠다.
intellij IDEA를 사용하시는 분들이라면 눈치를 채셨겠지만 맞습니다.
psvm
이라고 IDEA에 입력하시면 public static void main(Stinrg[] args){}가 만들어지는것을 확인할수 있을겁니다. ㅎㅎㅎ