자바에서 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)");
}
}
'Java' 카테고리의 다른 글
[Java] static 키워드의 메모리 구조, 사용 시기, 고전적 관점 vs 현대적 관점 (0) | 2025.04.08 |
---|---|
[Java] 자바 클래스 자기참조 개념 정리 (0) | 2025.04.06 |
[Java] Composition vs Inheritance — 언제 써야 하나? (0) | 2025.04.02 |
[Java] Java에서 배열 생성과 객체 생성의 차이 정리 (0) | 2025.04.02 |
[Java] 문자열을 검사하는 방법 - String isEmpty(), isBlank(), null 체크 (0) | 2025.04.01 |
댓글