JAVA/JAVA Basic

[ JAVA ] String args[] 존재 이유

IT록흐 2021. 6. 18. 20:09
반응형

 

public class StringArgs {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		System.out.println(args[0]);
		System.out.println(args[1]);
		System.out.println(args[2]);
	}
}

 

 

 

String[] args는 무엇일까?

 

 

args는 arguments의 약자로 '인수'(파라미터)라는 의미다. 

String[] args의 존재 이유는 main 메소드의 static에서 찾을 수 있다.

 

main 메소드는 static으로 선언된 정적 메소드이다.

 

 

정적 메소드(Static)

 

 

클래스의 메소드 사용법은

두 가지로 나뉜다.

 

 

1. 객체 생성 후 메소드 사용

 

가장 기본적인 방법이다.

Stack영역에서 new 연산자를 통해 메소드 영역의 클래스 정보를

토대로 Heap 영역에 객체생성을 명령한다.

 

그 후, 객체 메소드를 불러와 main 스레드에서 사용한다.

 

2. 객체 생성 없이 메소드 사용

 

객체 생성없이 메소드를 사용하려면 메소드 앞에 static이 붙어 있어야 한다. 그러면 객체 생성없이 바로 메소드 영역에 할당된 메소드를 사용할 수 있다.

 

 

 

static 메소드 정의

 

 

 

 

static 메소드 사용

 

 

 

이처럼 Calculator 클래스의 객체생성이 없더라도

클래스의 메소드를 사용할 수 있다.

 

 

 

String args[]의 존재 이유

 

main()가 static 메소드인 이유는 간단하다.

 

Stack 영역에 스레드가 있어야 'new 연산자'를 통해 객체생성이 가능하지만 Stack영역에 가장 먼저 적재되는 스레드는 main 메소드이다. 그러므로 main 메소드의 객체 생성이 불가능하기에 main 메소드는 static으로 설정된다.

 

 

여기서 문제가 발생한다.

 

 

main메소드가 첫 스레드라면 사용자가 main()에게 데이터를 넘겨주고 싶은 경우도 있을 것이다. main()에게 데이터를 넘겨주려면 main()가 시작되기 전에 데이터를 입력받는 스레드가 필요하다. 하지만 Stack 영역의 적재되는 첫 스레드는 main()이다. 이를 위해 JDK는 JVM이 클래스 파일을 처리하기전 커맨드 라인을 통해 데이터를 사용자로부터 입력받는다.

 

 

args 배열을

출력하는 main()을 작성한다.

 

 

 

 

 

이렇게 JDK는

사용자가 main()에게 넘겨주고 싶은 데이터를

java 명령어와 함께 받는다.

 

> java StringArgs Love Happy Sad

 

여기서 입력받은 데이터를 배열로 만들어 Heap영역에 저장하고 배열의 주소를 String[] args에 저장한다. 그리고 그 주소를 main()이 파라미터를 통해 넘겨받는 것이다.

 

public static void main(String[] args)

 

이렇게 넘겨받은 배열을 위 코드와 같이 작성하고 실행해본다.

 

 

 

 

 

 

출력이 완료되었다.

 

 

이는 이클립스로도

설정이 가능하다.

 

 

.

 

 

Run 탭에 들어가 Run Configurations를 클릭한다.

 

 

좌측 네비게이션에서

원하는 클래스를 선택하고

 

Arguments 탭을 선택후 원하는

데이터를 공백으로 구분하여 넣어준다.

 

그리고 실행시키면

 

 

이와 같은 결과로 출력이 된다.

 

 


정리

 

 

1. main 메소드는 첫 스레드이기에 static이여야 한다.

 

2. String[] args는 첫 스레드인 main에게 데이터를 넘겨주고 싶을 때를 위한 파라미터이다.

 

 

 

 

 

 

 

 

반응형