반응형

 

헷갈리는 클래스 영역의 변수 용어에 관해 정리해보고자 합니다.

 

 

멤버 변수 : 클래스 영역에 선언된 변수

클래스 변수 : 멤버 변수 중 static이 붙은 변수로, 해당 클래스의 인스턴스 모두가 공유

인스턴스 변수 : 멤버 변수 중 static이 붙지 않은 변수로, 해당 인스턴스만 접근 가능한 변수

 

(메서드 내부의 변수는 지역 변수이고, 자바에는 전역 변수의 개념이 없다고 합니다.

관련 링크 -> https://shm-m.github.io/blog/global_variable)

 

 

 


예제 코드를 통해 살펴보겠습니다.

import java.util.ArrayList;
import java.util.List;

public class Chef {
    private static final String COMPLETE_COOK_ANNOUNCEMENT = " 준비가 완료되었습니다.";
    private static final String COMPLETE_MENUS_ANNOUNCEMENT = "완성된 요리 : ";
    private static List<String> dishes = new ArrayList<>();
    private int countOfMe = 0;

    public void cook(String menu) {
        System.out.println(menu + COMPLETE_COOK_ANNOUNCEMENT);
        dishes.add(menu);
        this.countOfMe += 1;
    }
    
    public void informCountMadeMyMe() {
        System.out.println(this.countOfMe);
    }

    public void informWholeCompleteMenus() {
        System.out.println(COMPLETE_MENUS_ANNOUNCEMENT + dishes);
    }

}

Chef 클래스는 음식을 요리하고,

해당 요리사가 만든 음식 개수와,

총 준비된 메뉴 리스트 알려줍니다.

여기서 변수의 종류를 정리해보면,

 

멤버 변수 : COMPLETE_COOK_ANNOUNCEMENT, COMPLETE_MENUS_ANNOUNCEMENT, dishes, countOfMe

클래스 변수 : COMPLETE_COOK_ANNOUNCEMENT, COMPLETE_MENUS_ANNOUNCEMENT, dishes

인스턴스 변수 : countOfMe

 

와 같습니다.

 

 

아래와 같이 main함수를 실행해보겠습니다.

public class Practice {
    public static void main(String[] args) {
        Chef woojin = new Chef();
        Chef paul = new Chef();

        woojin.cook("밥");
        paul.cook("국");

        woojin.informCountMadeMyMe();
        paul.informCountMadeMyMe();

        woojin.informWholeCompleteMenus();
        paul.informWholeCompleteMenus();
    }
}

 

woojinpaul이 각각 밥과 국을 요리했습니다.

그리고 각자가 만든 요리 개수 묻습니다.

마지막으로 woojin. paul은 전체 준비된 메뉴 리스트를 묻습니다.

 

위와 같이 출력됨을 확인할 수 있습니다.

 

Chef 클래스의 countOfMe 변수(인스턴스 변수)는 각 인스턴스에만 영향을 받았습니다.

 

하지만 woojin이 준비한 밥, paul이 준비한 국 모두 dishes라는 클래스 변수에 추가되었습니다.

dishes 변수는 모든 인스턴수에게 영향을 받았음을 알 수 있습니다.

 

 

멤버 변수와 클래스 변수, 인스턴스 변수의 차이와 활용에 대해 알아보았습니다.

 

 

 

 

 

 

 

 

반응형

+ Recent posts