강의로 돌아가기
황승현

static 관련 질문입니다.

변수의 scope와 static 실습 (1) 에서 [ static 메소드는 static한 필드(속성)만 사용할 수 있습니다. ]
라고 설명되어 있어, 해당 지문에서 static을 지우면 프로그램 오류가 발생하는데,

변수의 scope와 static 실습 (2) 에선 Car.java 내에 있는 static 변수에서 static을 삭제해도,
왜 static main 메소드 내에서 오류없이 실행이 되나요?

1 개의 답변
김영후

순서의 문제입니다. static 메소드의 입장에선 다른 변수들이 이미 선언 되었는지 안되었는지를 알 수가 없기 때문에 자신이 사용할 변수들도 static하길 원하는 겁니다.

코드를 보면

public class StaticExam{

public static void main(String []args){
    Car taxi = new Car();     <--- 이 부분에서 이미 선언
    Car suv = new Car();     <--- 이 부분에서 이미 선언

    taxi.wheelCount = 10;
    suv.wheelCount = 4;

    System.out.println("taxi의 바퀴수:"+ taxi.wheelCount);
    System.out.println("suv의 바퀴수:"+ suv.wheelCount);
}

}

taxi와 suv는 static 메소드인 main 메소드 안에서 선언이 되었습니다. 자기가 선언을 해버렸기 때문에 스스로가 실행 순서를 알고 있는 겁니다.
이 경우는 Car.java에 있는 wheelCount를 static으로 하건 안하건 오류가 발생하지 않습니다.

더 확실한 차이를 알기 위해서는 아래 코드를 실행해보세요

public class StaticExam{

Car taxi = new Car(); 
Car suv = new Car();  //이 두 개로 실행할 경우 오류 발생

static Car taxi = new Car();
static Car suv = new Car(); // 이 두 개로 실행할 경우 오류 안 발생

public static void main(String []args){

    taxi.wheelCount = 10;
    suv.wheelCount = 4;

    System.out.println("taxi의 바퀴수:"+ taxi.wheelCount);
    System.out.println("suv의 바퀴수:"+ suv.wheelCount);
}

}

이렇게 static 메소드 밖에서 선언된 taxi와 suv는 static하게 선언되었느냐 아니냐에 따라 오류가 생깁니다.

답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.