[JAVA] 변수 - 인스턴스변수, 클래스변수, 지역변수

    변수의 종류

    변수의 선언된 위치에 따라 멤버변수지역변수로 나뉘고 멤버변수 중 static이 붙은 것은 클래스변수(static변수, 공유변수), 붙지 않은 것은 인스턴스변수이다.

     

    class Person {
        
        int age; // 인스턴스 변수
        static int countryCode; // 클래스 변수
    
        void isPretty(){
            boolean goodLooking = true; // 지역변수
        }
    }

    인스턴스 변수, 클래스 변수

    인스턴스변수와 클래스변수는 모두 클래스 영역에서 선언된다.

     

    인스턴스변수

    • 클래스의 인스턴스를 생성할 때 만들어진다.
    • 인스턴스마다 독립적인 저장공간을 가지므로 인스턴스마다 서로 다른 값을 가질 수 있다.

    클래스변수

    • 클래스가 메모리에 올라갈 때 생성되며 프로그램이 종료될 때까지 유지된다.
    • 모든 인스턴스가 공통된 저장공간(변수)를 공유하므로 한 클래스의 모든 인스턴스들이 공통적인 값을 유지해야하는 속성의 경우 클래스변수로 선언한다.
    • 인스턴스를 생성하지 않아도 '클래스이름.클래스변수'와 같은 형식으로 사용한다.
    •  public을 붙이면 프로그램 내 어디서나 접근 가능한 전역변수(global variable)로 사용하 수 있다.
    public class Test {
    
        public static void main(String[] args){
            Person person1 = new Person();
            Person person2 = new Person();
    
            Person.countryCode = 82;
            System.out.println("person1의 국가코드: "+person1.countryCode);
            System.out.println("person2의 국가코드: "+person2.countryCode);
            person1.countryCode = 1;
            System.out.println("person1의 국가코드: "+person1.countryCode);
            System.out.println("person2의 국가코드: "+person2.countryCode);
        }
    }

     

    출력 결과:

    person1의 국가코드: 82
    person2의 국가코드: 82
    person1의 국가코드: 1
    person2의 국가코드: 1

     

    Person.countryCode, person1.countryCode, person2.countryCode 모두 같은 저장 공간을 참조하므로 항상 같은 값을 갖게 된다.

    지역 변수

    메서드 내에 선언되어 메서드 내에서만 사용 가능하며, 메서드가 종료되면 소멸된다.

    for문, while문, if문 등 블럭 내에 선언된 지역변수는 블럭을 벗어나면 소멸되어 사용할 수 없게 된다.

     

     


    참고: 자바의 정석 - 남궁성

     

    🤞자바의 정석 스터디 1일차 p230-257🤞

     

    728x90

    'JAVA' 카테고리의 다른 글

    [JAVA] 생성자와 변수의 초기화  (0) 2022.12.01
    [JAVA] 메서드(Method)  (0) 2022.11.30
    [JAVA] 클래스와 객체  (0) 2022.11.29
    [JAVA] 객체 지향의 4가지 특징  (1) 2022.11.27
    [JAVA] 싱글톤 패턴 정리  (0) 2022.10.05

    댓글