main() 메소드의 인자
main() 메소드는 자바에서 응용프로그램이 시작되는 메소드로서 특별한 의미를 가진다. main() 메소드의 원형은 다음과 같다.
public static void main(String[] args) {
...
}
1. main() 메소드의 타입과 특징
1) 자바 응용프로그램 실행은 main() 메소드부터 시작한다.
2) main() 메소드는 public 속성이다.
public 속성은 메소드가 다른 모든 클래스에서 호출 가능함을 표시한다. 자바 응용프로그램이 실행을 시작할 때 자바 가상 기계(JVM)에 의해 호출되어야 하므로 public 속성으로 선언 되어야 한다.
3) main() 메소드는 static 속성이다.
main() 메소드는 시작할 때부터 JVM에 의해 호출되어야 하므로 프로그램 시작부터 메모리에 저장되는 static 속성이어야만 한다.
4) main() 메소드의 리턴 타입은 void이다.
c언어에서는 종료 코드를 등록하기 위해서 int 타입을 리턴하는 것이 표준이지만, 자바에서는 아무것도 리턴할 필요가 없기 때문에 리턴 타입이 void 이다.
5) main() 메소드의 인자는 문자열 배열(String[])이 전달된다.
자바는 명령행에 주어진 모든 인자를 문자열로 처리하여 main() 메소드에 전달한다.
+a) main() 메소드는 static 속성의 메소드이므로 static 속성이 아닌 메소드나 변수를 직접적으로 사용할 수 없다.
이에 대한 해결법으로는 new 연산자의 이용이 있다. new 연산자를 이용해서 사용하고자 하는 메소드나 변수가 있는 클래스의 객체를 만들고, 그 객체를 이용해서 해당 메소드나 필드에 접근하는 방법이 있다. 이와 비슷한 방법으로, static 속성이 아닌 메소드에서 static 속성의 메소드나 필드에 접근할 때에는 "클래스명.(메소드 이름 혹은 변수 이름)"의 방식으로 접근할 수 있다. 물론, 다른 클래스에 있는 메소드나 변수의 경우 접근 지정자의 범위에 의해서 접근하지 못하는 경우가 생길 수 있으니 주의하길 바란다.
2. main() 메소드에 인자 전달
main() 메소드의 인자는 C나 C++의 main() 함수의 인자와 비슷하다. main() 메소드의 인자는 무엇이며 어떻게 어떤 값이 전달되는지 알아보자. 다음은 Hello 클래스를 실행하는 명령이다.
C:\> java Hello option1 option2 ... optionN
option1, option2, ... , option N 등을 명령행 인자(command line argument)라고 부른다. 이 명령행 인자들은 모두 Hello 클래스의 main() 메소드에 인자로 전달이 되어진다.
이 과정을 구체적으로 설명하면 다음과 같다.
응용 프로그램이 시작되기 전, 이 인자들은 모두 하나의 문자열 배열에 저장된다. 그리고 문자열 배열에 대한 레퍼런스가 main() 메소드의 인자 args에 복사된다. 이렇게 함으로써 main() 메소드에서는 인자 args를 이용하여 명령행 인자들을 전달받을 수 있다.
- main() 메소드의 인자 이용 예시
main() 메소드에서 args[0], args[1] 등은 모두 문자열 타입이므로 필요한 경우 다른 타입으로 데이터를 변환하여 사용해야 한다. 명령행 인자의 개수는 args의 length 필드에 저장되어 있다.
예시 코드를 이용해서 구체적인 사용법을 알아보도록 하자. 다음과 같은 명령이 있다고 가정하자.
C:\> java Calc 2 44 68
그리고 Calc.java의 소스 코드는 다음과 같다.
public class Calc {
public static void main(String[] args) {
double sum = 0;
for (int i = 0; i < args.length; i++) {
sum += Double.parseDouble(args[i]);
}
System.out.println("Total = " + sum);
}
}
이 소스 코드를 실행시키면 입력한 명령행 인자의 총합이 출력될 것이다. 다만, 명령행 인자로 숫자가 아닌 값을 입력할 경우에는 NumberFormatException이라는 예외가 발생하게 될 것이다. 이 예외에 대해서는 다음 글에서 설명하도록 하겠다.
'Java > Java 기본' 카테고리의 다른 글
객체 지향과 자바 (0) | 2018.06.21 |
---|---|
예외 (Exception) (0) | 2018.06.21 |
메소드에서 배열 리턴 (0) | 2018.06.12 |
다차원 배열 (0) | 2018.06.12 |
배열의 크기와 인덱스 (0) | 2018.06.12 |