본문으로 바로가기

[자바]19. public static void main(String[] args) 의 이유?

category Language/자바 2021. 12. 9. 01:40
728x90
반응형
SMALL

자바의 시작은 main문인데 왜 저 public이지? 왜 static이지? 라고 생각했을때 

어떠한 말을 꺼낼수가 없었다. 때문에 간단히라도 정리한다.

 

public static void main(String[] args)

public

우리가 원하는 코드(.java)를 작성하여 결국 이 코드가 JVM 메모리 상에 한번은 등록되어 컴파일,런타임 과정을 거쳐서 코드에 대한 결과물이 나오게 된다.

JVM 원리를 간단히 참고하자:https://pulpul8282.tistory.com/172?category=823477

즉, 프로그램이 실행되는 시작점이 main() 메서드라고 생각하자

JVM이 클래스를 외부에서 호출할수 있도록  public 이 되었다.

 

static

메모리 절약을 위해서

그렇다. 어차피 main 을 통해서 프로그래밍이 실행되기로 약속되었기 때문에

매번 main을 호출하여 새로운 메모리 공간을 생성할 필요가 없다.

미리 생성되있고 그 값을 계속 미리 생성하는것이 아닌 미리 생성되있는것을 심지어 공유까지 한다. 얼마나 효율적인가

class Yoon{
     public static void main(String[] args){
        System.out.println("윤주영");
     }

}
이미 Yoon이라는 클래스가 생성되기도 전에 이미 main() 메소드는 JVM 메모리 상에 생성되어있다.

 아래 예제를 확인하면 static에 대해서 좀더 와닿을것이다.

 class CallMyName{
    static void print() {//static 메소드
      System.out.println("난 CallMyName 보다 먼저 태어나 있는 윤주영");
    }
    void print2() { //인스턴스 메소드
      System.out.println(
" CallMyName이 태어난 뒤에 태어나는 윤주영");
    }
}

public class Static{
    public static void main(String[] args) {
      CallMyName.print();
//static 메서드는 CallMyName를 생성하지 않고 바로 호출(출력)이 가능하다  
      CallMyName name = new CallMyName(); //CallMyName 인스턴스 생성->JVM메모리에 등록하는 과정
      name.print2(); //CallMyName 클래스를 생성해야지만 호출이 가능한 메소드
    }
}

 

Void

main() 메소드는 아무것도 반환하지 않는다.

main()메소드가 종료 되는 즉시 JAVA 프로그램도 종료되기 때문에 반환하는 것은 아무 의미가 없다.

 

String[] args

자바의 명령형태를 java.lang.String 클래스 유형의 배열로 넘긴다.

 

 

 

참고:https://www.geeksforgeeks.org/understanding-public-static-void-mainstring-args-in-java/

 

728x90
반응형
LIST