개발일지/Java

Java 필드(Field)

E-room 2022. 9. 8. 16:13
728x90
클래스에 포함된 변수

자바에서 변수는 클래스 변수(cv, class variable), 인스턴스 변수(iv, instance variable), 지역 변수(lv, local variable)로 구분될 수 있다.

 

일반적으로 필드라고 부르는 것은 클래스 변수와 인스턴스 변수이며, 이 둘은 다시 static 키워드의 유무로 구분된다.

 

static 키워드가 붙으면 -> 클래스 변수

없으면 -> 인스턴스 변수

 

이 세 가지 유형의 변수들은 주로 선언된 위치에 따라 그 종류가 결정되며 각각의 유효 범위를 가지게 된다.

class Example {
    int instanceVariable; // 인스턴스 변수
    static int classVariable; // 클래스 변수(static 변수, 공유변수)
    
    void method() {
        int localVariable = 0; // 지역 변수. {}블록 안에서만 유효
    }
}

 

  • 클래스 변수

공통된 저장공간을 갖는다.

 

모든 객체들이 동일한 값을 갖게 됨. 

한 클래스로부터 생성되는 모든 인스턴스들이 특정한 값을 공유해야 하는 경우에 사용

public class Main {
    public static void main(String[] args) {
        Dog frenchBullDog = new Dog();
        Dog chihuahua = new Dog();
        Dog pug = new Dog();

        frenchBullDog.legs = 5;
        chihuahua.legs = 6;
        pug.legs = 7;

        System.out.println(frenchBullDog.legs);
    }
}

class Dog {
    static int legs = 4;
}
// 7
// 클래스 변수는 모든 객체가 공유하기 때문에 하나만 바꿔도 모든 값이 바뀌는 격이다

 

인스턴스 변수와 달리 클래스명.클래스변수명 으로 사용 가능

// 객체 생성없이 사용
public class Main {
    public static void main(String[] args) {
        int legs = Dog.legs;
        System.out.println(legs);
    }
}

class Dog {
    static int legs = 4;
}

// 4

 

  • 인스턴스 변수

독립적인 저장 공간을 갖는다.

 

한 클래스로부터 생성된 모든 인스턴스들 각기 다른 값을 가질 수 있다

public class Main {
    public static void main(String[] args) {
        Dog frenchBullDog = new Dog();
        Dog chihuahua = new Dog();
        Dog pug = new Dog();

        frenchBullDog.name = "happy";
        chihuahua.name = "dubu";
        pug.name = "choco";

        System.out.println(frenchBullDog.name);
        System.out.println(chihuahua.name);
        System.out.println(pug.name);
    }
}

class Dog {
    String name;
}
// happy
// dubu
// choco
// 각기 다른 값을 가질 수 있음

 

  • 지역 변수

메서드 내에 선언되며 메서드 내에서만 사용 가능한 변수

멤버 변수와는 다르게 지역변수는 스택 메모리에 저장되어 메서드가 종료되는 것과 동시에 함께 소멸

 

힙 메모리에 저장되는 필드 변수는 객체가 없어지지 않는 한 절대로 삭제되지 않는 반면, 스택 메모리에 저장되는 지역변수는 한동안 사용되지 않는 경우 가상 머신에 의해 자동으로 삭제

728x90