자바의 정석 기초편 ch5-16,17 커맨드라인입력받기
5-16 커맨드 라인을 통해 입력받기
커맨드 라인에 입력한 값이 문자열 배열에 담겨서 전달된다.
커맨드 라인: windows에서는 커맨드 창
java 클래스이름 abc 123 "Hello world" <이렇게 커맨드 라인에 입력
문자열 값 3개: abc 123 "Hello world"(따옴표로 묶어서 하나의 값이 된다.)
문자열이 참조변수 args에 들어간다.
이건 자바 인터프린터가 해준다.
자바 인터프린터가 사용자가 입력한 값들을 가지고
문자열 배열을 만든다.(String 배열)
이걸 참조변수 args 전달한다.
args가 메인메소드에 있는 변수니까
메인 메소드 내에서 문자열 배열을 사용할 수 있게 된다.
사용자가 실행할 때 커맨드 라인에 입력한 값들을
이 프로그램에서 사용할 수 있게 된다.
만약 아무것도 안 넣고 클래스들만 주어지면
길이가 0인 배열이 만들어진다.
null값이 들어가는게 아니라 그냥 아무 내용 없는
배열이 만들어서 넘어간다.
배열이 길이가 0이면 저장공간이 없다는 얘기인데 이게 가능한가?
자바에서는 배열의 길이가 0인게 가능하다.
문자열 중에 ""(빈문자열)은 길이가 0인 배열이다.
빈 문자열도 쓸 데가 있다.
이클립스에서 실행할 때 args로 커맨드라인에서 입력한 것처럼
값을 주려면 실행에 Run Configurations 누르거나
Run에 Run Configurations를 클릭하자
Run에 Run Configurations를 눌러 실행했다면 Arguments가 있다.
여기에 원하는 값을 입력하면 된다.
입력 후 Run을 누르면 됨
누르면 입력한 값들이 문자열 배열로 바뀌어서
메인메소드로 넘겨준다.
public class lnterfaceEx {
public static void main(String[] args) {
System.out.println("매개변수의 개수:"+args.length);
for(int i=0;i<args.length;i++) {
System.out.println("args[" + i + "] = \""+ args[i] + "\"");
} // ""안에 들어가는 특수문자는 \를 붙여서 구분을 해준다.
}
}
결과
매개변수의 개수:3
args[0] = "abc"
args[1] = "123"
args[2] = "Hello world"
windows 커맨드 창에서 실행한다면
윈도우키+R 누르면 실행창이 나온다.
cmd 입력하고 엔터를 누른다.
여기서 클래스 파일이 있는 곳으로 가야하는데
그 경로는 이클립스에서 alt+엔터 누르면 소스파일에 위치가 나온다.
자바 파일이 아닌 클래스 파일이 있는 곳으로 가서 실행해야된다.
클래스 파일은 프로젝트 경로 아래의 bin폴더에 있다.
(자바 파일 있는 곳에서 한 칸 올라가서 bin폴더를 찾자.)
bin폴더를 들어가서 경로를 복사한다.(ctrl+c)
커맨드 창에 cd 입력 후 복사 한 걸 붙여넣는다.
cd C:\Users\gss98\workspace\_su1\bin
이런식으로 입력하면 된다.
(+참고 lnterfaceEx.class를 그대로 입력하면 안됨
lnterfaceEx를 입력해야 실행된다.)
근데 이걸 꼭 커맨드 창에 입력을 받아야하는가?
type이라는 명령어가 있는데(파일의 내용을 보여주는 명령어)
만약 커맨드창에서 입력을 할 수 없게 된다면
다른 파일 보고 싶을 때마다 프로그램(명령)을 고쳐야한다.
실행할 때 매개변수로 커맨드라인에 내가 원하는 값을 줄 수 있게 되면
type이란 명령을 고칠 필요가 없게 된다.
이 값이 오는 값에 따라서 다르게 실행하게 처리하면 되니까
커맨드라인에서 값을 주면 그 값을 프로그램 내에서 사용하는 거고
그렇게 프로그램을 짜놓으면 이클립스 안에 프로그램을 바꾸지 않아도 된다.
만약에 커맨드라인에서의 값을 이클립스 안에 프로그램에서 바꿔야 한다면
상황에 따라 프로그램을 계속 바꿔야한다.
바깥에 오는 값을 가지고 처리하도록 만들어 놓으면
사용자가 다른 값을 넣어도 프로그램은 바꾸지 않고 처리하는게 가능하다.