왜 자바의 main 메서드는static을 사용할까?, 메서드 선언부의 의미

Yuri JI·2023년 3월 15일
0

TIL

목록 보기
5/11
post-thumbnail

💡 자바의 정석을 공부하던 중 습관적으로 쓰고있는 public static void main(String[] args)의 의미에 대해서 궁금해져서 정리하는 글입니다.


자바로 작성한 프로그램은 public static void main (String[] args) 메서드에서 시작한다.

public static void main (String[] args) {
  ...
}

🌟 static으로 선언하는 이유

  • main 메서드는 모든 자바 프로그램의 시작점이다.
  • main 메서드가 아닌 경우 클래스를 인스턴스화 해야한다.
  • static을 사용하여 클래스의 인스턴스를 생성하지 않고 메서드를 호출할 수 있다.

public

main 메서드는 프로그램 어디에서나 접근이 가능해야하기 때문에 public 키워드를 사용한다.

  • public: 모든 곳에서 접근 가능
  • private: 자기 자신 클래스에서만 접근 가능
  • protected: 자기 자신 클래스와 상속된 클래스에서 접근 가능
  • main을 생략 시 에러메세지

void

main 메서드는 프로그램의 시작과 끝으로 이 메서드가 종료되면 프로그램이 종료된다. 따라서 반환된 객체에 대해 JVM이 아무 작업도 수행하지 않기 때문에 return 값의 의미가 없다.

  • void 생략 시 에러 메세지

static

main 메서드는 프로그램의 시작점으로, 프로그램이 실행되면 가장 먼저 호출되는 메서드이다. 프로그램이 실행 직후에는 어떠한 객체도 존재하지 않는다. 따라서 main 메서드에 static이 붙지않는다면, 런타임 시작 시점에 메서드를 실행할 객체가 없어서 메서드 실행이 불가능하다.
따라서 static을 사용하여 객체의 생성없이 메모리에 할당시켜 메서드를 호출 가능하도록한 것이다.

또한 static으로 선언하면 메모리에 항상 상주하도록 설정할 수 있기때문이다. 프로그램의 시작점이 GC에 의해 종료되는 것을 막아 프로그램이 죽는 것을 방지할 수 있다. (+Garbage Collector에 의해 메모리에서 정리되지 않음)

staticheap
메모리 할당 기준프로그램 실행되는 순간연산이 실행되는 순간
메모리 정리 기준( Garbage Collector )정리 대상 아님Garbage Collector 에 의해 정리
  • static 생략 시 에러 메세지

main

규칙이다.

  • 메서드 이름 변경 시 에러 메세지

String[] args

args는 String[] 배열의 변수로 다른 값으로 써도 되지만 통상적으로 args 사용힌다.

프로그램의 실행 순간에 외부의 값을 가져와서 프로그램 내 사용하고자 할 때 메모리에 저장할 공간을 미리 선언해 두는 역할을 한다.

정리 !

참조

https://www.javatpoint.com/why-main-method-is-always-static-in-java
https://mozi.tistory.com/553
https://programmingfbf7290.tistory.com/entry/%EC%99%9C-main%EB%A9%94%EC%86%8C%EB%93%9C%EB%8A%94-static%EC%9D%B8%EA%B0%80

profile
안녕하세요 😄

2개의 댓글

comment-user-thumbnail
2023년 4월 3일

psvm 내부에 String[] args를 쓰는 이유는 무엇인가요?

코테 풀때 저는 String[] test로 쓰기도 하는데.. 궁금합니다!

1개의 답글