Java

[Java] 클래스 필드의 구분

junga 2022. 9. 6. 19:19
  • 클래스의 필드(field)란 클래스에 포함된 변수(variable)를 의미한다.
  • 클래스 내에서 필드는 선언된 위치에 따라 구분된다.

1. 클래스 변수(static variable)

  • 클래스 영역에 위치한 변수 중에서 static 키워드를 가지는 변수

2. 인스턴스 변수(instance variable)

  • 클래스 영역에 위치한 변수 중 static 키워드를 가지지 않는 변수

3. 지역 변수(local variable)

  • 메소드나 생성자, 초기화 블록 내에 위치한 변수
class Car {
    static int modelOutput; // 클래스 변수
    String modelName;       // 인스턴스 변수

    void method() {
        int something = 10; // 지역 변수
    }
}

클래스 변수와 인스턴스 변수는 초기화를 하지 않아도 변수의 타입에 맞게 자동으로 초기화가 된다.
하지만 지역 변수는 사용 전 초기화하지 않으면, 오류가 발생한다.


생성 및 소멸 시기, 저장되는 메모리 공간과 사용 방법까지도 서로 다르다.

http://www.tcpschool.com/java/java_member_field



클래스 변수와 인스턴스 변수 차이

  • 클래스 변수는 인스턴스를 생성하지 않고도 바로 사용할 수 있다.

  • 클래스 변수는 생성된 모든 인스턴스가 같은 값을 공유하며, 이를 공유 변수(shared variable)라고도 한다.

  • 반면 인스턴스 변수는 인스턴스마다 고유한 값을 가진다.

class Field {
    static int classVar = 10; // 클래스 변수 선언
    int instanceVar = 20;     // 인스턴스 변수 선언
}



public class Main {
    public static void main(String[] args) {

        // 지역 변수 선언과 참조
        int var = 30;      
        System.out.println(var); // 30

        // 인스턴스 생성
        Field myField1 = new Field();  
        Field myField2 = new Field(); 

        // 클래스 변수 참조
        System.out.println(Field.classVar);    // 10
        System.out.println(myField1.classVar); // 10
        System.out.println(myField2.classVar); // 10

        // 클래스 변수 값 변경 후 참조
        myField1.classVar = 100;        
        System.out.println(Field.classVar);    // 100
        System.out.println(myField1.classVar); // 100
        System.out.println(myField2.classVar); // 100

        // 인스턴스 변수 참조
        System.out.println(myField1.instanceVar); // 20
        System.out.println(myField2.instanceVar); // 20

        // 인스턴스 변수 값 변경 후 참조
        myField1.instanceVar = 200;   
        System.out.println(myField1.instanceVar); // 200
        System.out.println(myField2.instanceVar); // 20
    }
}

'Java' 카테고리의 다른 글

[Java] 클래스 메서드와 인스턴스 메서드  (0) 2022.09.07
[Java] this와 this()  (0) 2022.09.06
[Java] 클래스 class  (0) 2022.09.06
[Java] 다차원 배열과 가변 배열  (0) 2022.09.05
[Java] 배열 Array, 복사 방법  (0) 2022.09.04