반응형
이번 글에서는 static 메서드 안에서
인스턴스 멤버(필드, 메서드)를 직접 사용하려면 객체를 생성해야 한다는 규칙을 학습합니다.
static은 클래스에 소속되고, 인스턴스 멤버는 객체에 소속되기 때문에 이 둘은 구분해서 사용해야 합니다.
📌 실행 코드 (Car.java)
package ch06.sec10.exam03;
public class Car {
int speed;
void run() {
System.out.println(speed + "으로 달립니다.");
}
static void simulate() {
Car car = new Car();
car.speed = 200;
car.run();
}
public static void main(String[] args) {
simulate();
Car car = new Car();
car.speed = 60;
car.run();
}
}
💬 코드 설명
- int speed
→ 자동차 속도를 저장하는 인스턴스 필드 - void run()
→ 현재 속도로 달리는 메시지 출력 (인스턴스 메서드) - static void simulate()
→ static 메서드이기 때문에 직접 speed나 run()을 호출할 수 없음 → 대신 new Car()로 객체를 생성한 뒤 인스턴스 필드와 메서드를 사용 - main()
→ 프로그램 시작점
→ simulate() 호출 후, 별도로 또 다른 Car 객체를 생성해서 동작
💻 실행 결과
200으로 달립니다.
60으로 달립니다.
📌 간단 정리
구분 | 설명 |
simulate() | 객체를 직접 생성하여 인스턴스 멤버 사용 |
main() | static 메서드. simulate() 호출 후, 별도 Car 객체 생성 |
💡 포인트 정리
- static 메서드에서는 인스턴스 필드나 메서드를 직접 사용할 수 없다
- 사용하려면 객체를 생성해야 한다 (new 클래스명())
- static 메서드는 프로그램 시작이나 공통 기능 수행에 적합
- 객체별로 독립적인 상태(speed)를 가질 수 있음
'Java > 자바 정리' 카테고리의 다른 글
52. 패키지와 import 사용하기 (0) | 2025.04.29 |
---|---|
51. static final로 상수(Constant) 정의하기 (0) | 2025.04.29 |
50. final 필드 - 수정 불가능한 데이터 만들기 (0) | 2025.04.29 |
48. static 필드와 static 메서드 (0) | 2025.04.28 |
47. this를 활용한 메서드 호출과 객체 동작 (0) | 2025.04.28 |
46. 메서드 오버로딩(Method Overloading) (0) | 2025.04.28 |