SECTION
article thumbnail
Published 2021. 9. 23. 05:56
[JAVA] main() 메서드 JAVA

- main() 메서드

 

: 흔히 프로그래밍할 때 main() 메서드를 많이 사용했을 것이다.

특히 자바에서는 public static void main(String[] args) 를 이용했을 것이다.

 

자바 API 문서를 보면  https://docs.oracle.com/en/java/javase/17/docs/api/jdk.compiler/com/sun/tools/javac/Main.html

 

Method Details

  • main
public static void main(String[] args)
                 throws Exception

: Main entry point for the launcher. Note: This method calls System.exit.

 

Parameters:
args - command line arguments

Throws:
Exception - only if an uncaught internal exception occurs; just retained for historical compatibility

: main 메서드의 설명이 위와 같이 적혀 있다. 

main 메서드는 entry point 를 가지고 있고 System.exit 를 호출한다고 적혀 있다. 

 


- System.exit 

public static void exit(int status)

: 이 또한 자바 API 문서에 정의되어 있다. 설명으로는 현재 실행중인 JVM을 종료한다는 뜻이다.

status 값에 일반적으로 정상 종류인 경우 0으로 지정하고 비정상 종류일 때 0 이외의 다른 값을 준다

System.exit(0);  // 정상적으로 종료
System.exit(1);  // 비정상적으로 종료

예외처리로는 SecurityException 를 이용할 수 있다.

 

 

- entry point

: 프로그램이 실행이 시작되는 시작점을 의미한다.

: 자바의 경우 엔트리 포인트는 한 개로 정의되어 있다. 


: 그렇다면 main 메서드 인자를 보자.

String[] args 처럼 되어 있는데 이는 String 객체로 정의된 args 라는 배열로 인자를 받겠다는 의미다.

자바에서 배열 선언 방법은 3가지이다.

String args[]
String [] args
String ...args

위 3가지 전부 잘 실행된다. 또한, args의 이름을 변경해도 문제가 없다.


- main() 메서드가 실행 전 JVM 에서 수행하는 전처리 작업

 

일반적인 프로그램 메모리는 코드 실행 영역 / 데이터 저장 영역으로 나뉜다. 

static 영역
stack 영역 heap 영역

객체지향 프로그램의 메모리 사용 방식은 위와 같이 stack 영역(지역변수, 메서드) heap 영역(동적 메모리), static 영역으로 나뉜다.

 

1. java.lang 패키지 배치 : static 영역에 오게 된다.

 

 

 

 

 

2. 클래스와 import 패키지 배치 : static 영역에 오게 된다.

3. main() 메서드 스택 프레임 할당 : stack 영역에 main() 스택 프레임을 할당해준다.

4. 메서드 인자 변수 공간 할당 : args 인자 변수 공간을 할당해 준다.

5. main() 메서드 내부 코드 실행 후 종료 후 : stack 영역이 비워진다.

 


참고

https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/SecurityException.html

https://stackoverflow.com/questions/261428/entry-point-for-java-applications-main-init-or-run

https://velog.io/@skyepodium/JAVA-%EB%A9%94%EC%9D%B8-%EB%A9%94%EC%86%8C%EB%93%9C-public-static-void-mainString-args-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0

 

profile

SECTION

@SectionR0

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그