Variables

ymk·2023년 6월 7일
0
post-thumbnail

📄 선언 위치에 따른 변수의 종류

변수는 클래스변수, 인스턴스변수, 지역변수로 모두 세 종류가 있다. 변수의 종류를 결정짓는 중요한 요소는 변수의 선언된 위치다. 멤버 변수(메서드 밖에서 선언된 변수)를 제외한 나머지 변수들은 모두 지역변수(메서드 안에서 선언된 변수)이며, 멤버 변수 중 static이 붙은 것은 클래스변수, 붙지 않은 것은 인스턴스변수이다.

class Variables {
	int a;      // 인스턴스변수
    static b;	// 클래스변수 (static 변수, 공유변수)
    
    void method() {
    	int c = 0;    // 지역변수
    }
}

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

클래스 영역에 선언되며, 클래스의 인스턴스가 생성할 때 만들어진다. 따라서 인스턴스변수의 값을 사용하기 위해서는 인스턴스를 먼저 생성해야한다.
각각의 인스턴스는 독립적인 공간을 가지므로 서로 다른 값을 가질 수 있다. 인스턴스마다 고유의 상태를 가져야 한다면 인스턴스변수를 선언하면 된다.

2. 클래스변수 (class variable)

클래스변수는 인스턴스 변수 앞에 static을 붙여서 만들 수 있다. 인스턴스변수와는 다르게 클래스변수는 모든 인스턴스가 공통된 저장공간(변수)을 공유하게 된다. 한 클래스에서 모든 인스턴스가 공통적인 값을 가져야할 때 선언하면 된다. static이 붙여 있으므로 인스턴스를 생성하지 않고도 바로 사용할 수 있다.

클래스가 메모리에 로딩될 때 생성되어 프로그램이 종료될 때 까지 유지되며, public을 앞에 붙이면 같은 프로그램 내에서 어디서나 접근할 수 있는 전역변수(global variable) 의 성격을 갖는다.

3. 지역변수(local variable)

메서드 내에 선언되어 메서드 내에서만 사용 가능하며, 메서드가 종료되면 소멸되어 사용할 수 없게 된다. for문이나 while문의 블럭 내에 선언된 지역변수는 지역변수가 선언된 블럭 {} 내에서만 사용 가능하고 블럭을 벗어나면 소멸되어 사용할 수 없게 된다.

인스턴스변수는 인스턴스가 생성될 때 마다 생성되므로 인스턴스마다 각기 다른 값을 유지할 수 있지만, 클래스변수는 모든 인스턴스가 하나의 저장공간을 공유하므로, 항상 공통된 값을 가진다.

카드를 예로 들어보자. 무늬와 숫자는 인스턴스변수, 카드의 폭, 넢이는 클래스변수로 둘 수 있다.


Reference

Java의 정석 - 3rd Edition by. 남궁 성

profile
개발 공부 일지

0개의 댓글