더북(TheBook)

정답

static int value = 10;

 

해설

static 메서드에서는 static한 필드만 사용할 수 있습니다. 즉, value 변수를 선언할 때 static 키워드를 붙여줘야 합니다. 모든 클래스는 틀이고, 클래스를 사용하기 위해서는 객체를 생성해야 한다고 했습니다. 객체를 생성하는 과정을 인스턴스화라고 합니다. 인스턴스화하지 않으면 실체는 생기지 않습니다. 다시 말해 인스턴스화한다는 말은 하드디스크에 저장된 클래스를 사용할 수 있도록 메모리에 올려주는 것을 의미합니다. 이렇게 메모리에 올라와 있는 자원만 사용이 가능합니다.

 

static이라는 키워드는 해당 요소를 인스턴스화하지 않고, 메모리에 올려주는 역할을 합니다. 이때 객체의 모든 요소를 메모리에 올리는 것은 아니고, static으로 선언한 요소만 메모리에 따로 올려줍니다. 그래서 main 메서드는 그 메서드를 감싸는 객체를 인스턴스화하지 않았는데도 사용할 수 있었습니다. 다시 생각하면 static한 요소만 메모리에 올라와 있고, 나머지는 메모리에 없기 때문에 static한 메서드에서는 static한 필드만 사용할 수 있는 것입니다.

 

main 메서드는 static하고, valuestatic하지 않기 때문에 value라는 변수를 그냥 사용하려고 하면 에러가 발생합니다. 따라서 main에서 value 변수를 사용하기 위해 변수 선언 앞에 static 키워드를 붙여줍니다.

 

 

문제 2 static한 변수는 여러 인스턴스에서 숫자를 변경해도 값이 모두 공유됩니다. 다음 코드에서 taxiwheelCountsuvwheelCount를 서로 다르게 지정한 것처럼 보이지만, taxisuvwheelCount는 둘 다 마지막에 지정한 4라는 값을 가집니다. Car 클래스의 wheelCountstatic하기 때문입니다. 코드를 작성한 뒤 결과를 확인해보세요.

package javaStudy;
public class Car{
    static int wheelCount;
    int speed;
}
package javaStudy;
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의 바퀴 수:4
suv의 바퀴 수:4

 

정답

완성형 예제입니다.

 

해설

static 키워드가 붙은 요소들은 메모리에 미리 올라와 있다고 설명했습니다.

 

static 키워드가 붙은 필드는 객체를 생성하기 전에 메모리 공간을 확보하므로, 객체를 생성할 때마다 각각 메모리 공간을 확보하는 다른 필드와 다르게 값을 저장하는 메모리 공간을 하나만 가지므로 모두 공유합니다.

 

그림 30-3 | static 키워드

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.