Java - 명령행 인자 입력 받기

터미널이나 Command line에서 자바 프로그램을 실행시킬 때, 프로그램으로 인자를 전달할 수 있고 main() 함수 안에서 인자를 받아서 처리할 수 있습니다.

1. 명령행(Command line)에서 인자 받기

자바 프로그램이 실행될 때, 전달되는 인자는 main(String[] args)에서 args입니다.

  • 인자를 전달하지 않으면 args의 배열 크기는 0입니다.
  • 인자를 1개 전달하면 args의 크기는 1이며, args[0]으로 접근할 수 있습니다.

아래와 같이 전달받은 인자를 출력하는 코드를 구현했습니다.

public class Example {

    public static void main(String[] args) {
        if (args.length == 0) {
            System.out.println("args size is 0");
            return;
        }

        for (int i = 0; i < args.length; i++) {
            System.out.println("args[" + i +"] = " + args[i]);
        }
    }
}

터미널에서 javac 명령어로 java 코드를 컴파일하면

$ javac Example.java

아래와 같이 java 명령어로 실행시킬 수 있습니다. 실행시키면서 인자를 아무것도 전달하지 않았기 때문에 args의 배열 크기가 0이됩니다.

$ java Example
args size is 0

아래와 같이 인자 a를 전달하면 args의 크기는 1이 되며, args[0]에 저장됩니다.

$ java Example a
args[0] = a

인자 3개를 전달하면, 전달한 개수만큼 배열 크기가 커지며 입력한 순서대로 Index로 접근할 수 있습니다.

$ java Example a 100 200
args[0] = a
args[1] = 100
args[2] = 200

2. String, Integer, Double을 인자로 받기

인자는 모두 String으로 전달되기 때문에, 필요하다면 String을 Integer, Double 등으로 parsing하여 원하는 타입으로 변환해야 합니다.

아래 예제는 3개의 인자를 받으며, 문자열을 Integer와 Double로 변환합니다.

public class Example {

    public static void main(String[] args) {
        if (args.length < 3) {
            System.out.println("Invalid arguments, size: " + args.length);
            return;
        }

        try {
            String name = args[0];
            int age = Integer.parseInt(args[1]);
            double score = Double.parseDouble(args[2]);
            System.out.println("name: " + name + ", age: " + age + ", score: " + score);
        } catch (Exception e) {
            System.out.println("Parsing error : " + e);
        }
    }
}

인자를 3개 입력하지 않으면, 파싱하지 않고 프로그램을 종료하도록 만들었습니다.

$ java Example 1
Invalid arguments, size: 1

아래와 같이 String, int, double 순서로 전달하면 파싱이 성공하며 내용을 출력합니다.

$ java Example John 35 95.0
name: John, age: 35, score: 95.0

아래와 같이 인자를 3개 전달하였지만, 잘못된 타입의 데이터를 전달하였을 때는 파싱에러가 발생합니다. 에러 발생 시, 기본 값을 사용하도록 구현하는 등의 예외처리를 할 수 있습니다.

$ java Example John 35 Ten
Parsing error : java.lang.NumberFormatException: For input string: "Ten"
Loading script...
codechachaCopyright ©2019 codechacha