java

자바 main 메소드는 왜 static일까?

주다애 2023. 12. 19. 01:18

자바의 main 메소드는 static이 붙은 정적 메소드이다.

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

 

왜 main 메소드에 static이 붙었을까?

 

⛏ static 메소드

 

static 메소드는 정적 메소드, 클래스 메소드라고도 하는데 객체 생성 없이 클래스로부터 바로 호출이 가능하다.

유틸리티성 메소드에 자주 사용된다.

static 메소드는 메소드 영역에 존재하며 클래스로 접근하여 사용할 수 있다.

public class StaticMethodMain {
    public static void main(String[] args) {
        int a = 30;
        // 클래스로 바로 접근
        int result = StaticMethod.calculate(a);
        System.out.println("계산 결과 : " + result);
    }
}

public class StaticMethod {
    static int calculate(int value) {
        return value * value;
    }
}

※ 객체를 생성해서 객체로 접근하는 방법도 있다. 하지만 이 방법은 추천하지 않는다. 왜냐하면 코드가 인스턴스 메소드를 접근한다고 생각해서 오해를 살 수 있기 때문이다.

 

그렇다면 왜 main 메소드는 static 메소드일까?

main 메소드는 프로그램의 시작점이다.(Entry Point)

즉, 프로그램이 시작하면 main 메소드가 호출되는데 이 때 메모리에 올라가 있지 않으면 main 메소드를 호출할 수가 없다.

결국 main 메소드는 호출되기 전에 메모리에 적재되어야 하는 것이다.

static으로 선언된 변수나 메소드는 JVM에서 객체 생성 없이 메소드 영역에 메모리가 할당된다.

메소드 영역은 프로그램 전체에서 공유하는 메모리 영역으로, 그 안에 할당된 메모리는 클래스가 JVM에 로딩되는 순간 할당되며 프로그램이 끝날 때까지 생명주기가 이어진다.

 

정리하면, main 메소드는 프로그램의 시작점이므로 메모리에 할당되어 있어야 한다.

이 때 static을 붙이면 메소드 영역에 클래스가 JVM에 로딩되는 순간 메모리가 할당되어 main 메소드를 호출하면서 프로그램 시작이 가능해진다.

'java' 카테고리의 다른 글

인터페이스 vs 추상클래스  (0) 2024.05.16
상속과 메모리 구조  (0) 2023.12.21
자바 메모리 구조  (0) 2023.12.16
final 키워드(변수, 상수)  (0) 2023.12.14
생성자  (0) 2023.12.12