본문 바로가기
  • soobinhand의 기술 블로그
Computer Science/JAVA

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

by soobinhand 2022. 2. 4.
728x90

자바에서 변수와 메서드는 나에겐 아직 복잡한 개념이라 다시 한 번 공부하며 기록한다.

 

선언 위치에 따른 변수 종류

사실 크게 보면 변수는 멤버 변수와 지역 변수, 딱 두 가지 뿐이다. 더 작게 들어가면 멤버 변수엔 클래스 변수와 인스턴스 변수로 나눠진다. 물론 이전에 멤버 변수와 지역 변수가 선언되는 위치가 다르다. 클래스 영역에 선언되면 멤버 변수, 메서드 영역이나 매개변수에 선언된 것은 지역 변수이다.

그리고 멤버 변수 중에 static이 붙으면 클래스 변수고 안 붙으면 인스턴스 변수이다.

나는 아래와 같이 코드를 짜본다.

class Variables{
	// 클래스 영역
	int instanceVariable; // 인스턴스 변수
    static int classVariable; // 클래스 변수, static 변수
    
    // 메소드 영역
    void method(){
    	int localVariable; // 지역 변수
    }
}

표로 확인해보자. (자바의 정석을 참고했습니다)

변수 선언 위치 생성 시기
클래스 변수 클래스 영역 클래스가 메모리에 올라갈 때
인스턴스 변수 클래스 영역 인스턴스가 생성되었을 때
지역 변수 클래스 이외의 영역 (메서드, 생성자, 초기화 블럭 등등) 변수 선언문이 수행되었을 때

인스턴스 변수

클래스 영역에 선언된다.

클래스의 인스턴스를 생성할 때 만들어진다.

그렇기에 인스턴스 변수를 가져오려면 인스턴스를 먼저 생성해야 한다.

인스턴스는 독립적인 저장공간을 가지므로 서로 다른 값을 가질 수 있다. 인스턴스마다 고유한 상태를 유지해야하는 속성의 경우, 인스턴스 변수로 선언한다.

클래스 변수

클래스 변수를 선언하는 방법은 인스턴스 변수 앞에다가 static만 붙여주면 된다.

클래스 변수는 모든 인스턴스가 공통된 저장공간을 공유한다.

한 클래스의 모든 인스턴스들이 공통적인 값을 유지해야하는 경우 클래스 변수로 선언한다.

클래스 변수는 인스턴스 변수와는 달리 인스턴스를 생성하지 않고도 언제라도 바로 사용할 수 있다.

 

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

728x90

댓글