[JAVA] Main 클래스 선언시 static, String[] args인 이유

Devjuho·2024년 1월 1일
1

Java

목록 보기
2/3

안녕하세요. 본질을 추구하는 개발자 우주호입니다.

자바로 개발하다보면 당연시 여기는 것중 하나인 Main 실행 메소드에 대해 알아보도록 하겠습니다.

MainArgs 클래스를 생성하고 main 메소드를 생성하면 아래와 같이 생성됩니다.
왜?! String[] 파라미터로 값을 받을까에 대해 궁금증이 생겼습니다.

public class MainArgs {
    public static void main(String[] args) {
    	System.out.println("WOOJUHO");
    }
}

String[] 파라미터로 받는 원인은 바로 static 선언에 있었습니다.

아래의 JVM RUNTIME DATA AREA는 아래와 같이 구성되어있습니다.
( Heap, Stack, Method )

메소드를 선언하기 위해서는 2가지 중 하나는 해야합니다.

  1. 객체 생성 후 사용

    Stack 영역에서 new 연산자를 통해 메소드 영역의 내용을 토대로 Heap영역에 new객체생성 명령

  2. 객체 생성없이 사용

    Static 선언시 객체 생성없이 바로 메소드영역에서 할당된 메소드를 사용가능

여기서 중요한 포인트(!)는 stack영역에 가장 먼저 적재되는 쓰레드 main 메소드입니다. 그렇기에 main메소드는 객체 생성이 불가능하기에 static 설정됩니다.


new 객체로 생성이 아닌 static변수는 인자를 못받을까?


정답은 아닙니다!
실제로 Main 메소드의 인자 값으로 String[] args로 받고 있으며 아래와 같이 수행됩니다.

[코드]

public class MainArgs {
    public static void main(String[] args){
        // static 정적 메소드

        System.out.println(args[0]);
        System.out.println(args[1]);
        System.out.println(args[2]);
    }
}

[결과]

수정이 필요한 내용이 있다면 댓글로 피드백 부탁드립니다. 🙇🏻🙇🏻

[참고문헌]
https://lordofkangs.tistory.com/12

profile
설계하고 구현하는 걸 좋아하는 개발자입니다.

0개의 댓글