2008. 8. 14. 17:40

[아시나요?]main()메소드에 관하여

지금까지 아무 생각 없이 사용하고 있는 main()메소드에 대하여 알아보자


     public static void main(String [] arg)


자바에 존재하는 모든 메소드나 변수는 모두 클래스 또는 객체와 함께 사용해야만 한다. sin()메소드의 경우 Math.sin()과 같이 클래스와 함께 사용하는 것은 가능하지만 sin()메소드만 독립적으로 호출할 수는 없다. 그런데 여기에는 하나의 예외가 존재하는데 바로 main() 메소드이다. main() 메소드는 어떤 클래스나 객체와 함께 사용되는 것이 아니라 자바 가상머신에 의해서 단독으로 호출되는 유일한 메소드이다. 이 말의 의미를 잘 생각해 보면 main() 메소드가 가상머신 , 즉 외부의 어떤 곳으로 부터 호출을 당한다는 사실을 알 수 있다. 즉 외부에서 main() 메소드를 호출할 수 있어야 하기 때문에 main() 메소드는 public 으로 선언하는 것이다.


자바 가상머신에서 main() 메소드를 호출하기 위해서는 main() 메소드가 메모리에 상주하고 있어야만 한다. 그리고 다른 어떤 객체보다도 먼저 실행되어야 하기 때문에 main() 메소드를 static 으로 선언하는 것이다.


main() 메소드는 결과값을 리턴하지 않기 때문에 리턴형을 void로 선언한다.


마지막으로 main() 메소드의 인자로 사용하는 String [] args는 자바 프로그램을 실행할 때 입력되는 문자열을 포함하고 있다. 더 자세히 말하면 클래스명 다음에 입력하는 데이터를 문자열로 저장하고 있는 것이다. 다음과 같이 프로그램을 실행시켰다면 args[0] = test1, args[1] = test2, args[2] = finaltest문자열이 포함된다.


C:\>java CommandLine test1 test2 finaltest


##Command.java##


public class CommandLine {

       public static void main(String [] args) {

                 /* 배열 args의 내용을 출력 */

                 for(int i=0 ; i< args.length ; i ++) {

                           System.out.println("args[" + i + "] = " + args[i] );

                 }

        }

}//end class CommandLine


##실행결과##

args[0] = test1

args[1] = test2

args[2] = finaltest



명령어 라인의 입력이 배열 args 에 순서대호 포함되어 있는 것을 확인할 수 있다. 그리고 args는 변수명이기 때문에 언제나 변경이 가능하다.