본문 바로가기
Java

[Java] 자바에서 main() 메서드 안에서 다른 메서드 호출

by clolee 2025. 4. 6.

자바에서 main() 메서드는 프로그램의 시작점인데, 이 메서드는 static으로 선언되어 있음.
그래서 main() 메서드 안에서 호출할 다른 메서드도 static으로 선언해야 사용할 수 있다.
그 이유를 객체 생성 여부메모리 구조 관점에서 자세히 알아보자.


🔍 왜 static으로 선언해야 할까?

1. main() 메서드 자체가 static이기 때문

public static void main(String[] args) {
    // 여기서 다른 메서드를 호출할 때...
}
  • 자바는 프로그램을 실행할 때 main() 메서드를 호출.
  • 그런데 이때, 객체를 생성하지 않고 클래스만으로 접근 가능하도록 하기 위해 main()static으로 선언되어 있는 것임.
  • 즉, 자바가 프로그램 시작 시 new 클래스명()을 하지 않고 그냥 클래스명.main() 으로 호출.

2. static 메서드는 객체 없이 클래스 이름만으로 접근 가능

public static void sayHello() {
    System.out.println("Hello!");
}
  • 위 메서드는 static이기 때문에 클래스명.sayHello()로 바로 호출 가능.
  • 그래서 static main() 안에서 바로 sayHello()를 호출할 수 있음.

3. static이 아닌 일반 메서드는 객체를 먼저 생성해야 사용 가능

public void sayHello() { // static 없음
    System.out.println("Hello!");
}

이럴 경우에는 main() 안에서 이렇게 써야 함:

public static void main(String[] args) {
    MyClass obj = new MyClass(); // 객체 생성
    obj.sayHello();              // 인스턴스 메서드 호출
}

즉, static이 없는 메서드는 클래스의 인스턴스(객체)가 있어야만 쓸 수 있기 때문.

cf) 객체 자기 참조 :

2025.04.06 - [Java] - [Java] 자바 클래스 자기참조 개념 정리


💡 정리: static을 붙여야 하는 이유

항목 static 메서드 일반 메서드
호출 방식 클래스명.메서드() 객체명.메서드()
객체 필요 여부 ❌ 필요 없음 ✅ 필요함
main() 안에서 사용 가능 여부 ✅ 가능 ❌ 객체 생성 없이는 불가능

✅ 예시 코드로 정리

public class Example {

    public static void main(String[] args) {
        sayHello(); // static이라 객체 없이 호출 가능

        Example obj = new Example();
        obj.sayHi(); // 비-static 메서드는 객체 생성 후 호출
    }

    public static void sayHello() {
        System.out.println("Hello (static)");
    }

    public void sayHi() {
        System.out.println("Hi (non-static)");
    }
}

댓글