Hello

Java 인스턴스 변수 vs 클래스 변수 vs 지역변수

by 볼빵빵오춘기

변수의 종류를 결정짓는 중요한 요소는 ‘변수의 선언위치’

  • 따라서 변수가 어느 영역에 선언되었는지를 확인하는 것이 중요하다.
  • 클래스 변수와 인스턴스변수를 합쳐서 멤버변수라고 부른다.
  • 클래스 영역에는 선언문만 가능하다.
public class Var{
	int iv; // 인스턴스 변수
	static int cv; // 클래스 변수

	void method(){
		int lv; // 지역 변수
	}
}

 

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

 

인스턴스 변수

  • 인스턴스 변수의 값을 읽어오거나 저장하려면 인스턴스를 먼저 생성해야 한다.
  • 인스턴스 별로 다른 값을 가질 수 있으므로, 각각의 인스턴스마다 고유의 값을 가져야 할 때는 인스턴스 변수로 선언한다.

 

클래스 변수

  • 인스턴스 변수에 static만 붙여 주면 된다.
  • 모든 인스턴스가 공통된 값을 공유한다.
  • 한 클래스의 모든 인스턴스들이 공통적인 값을 가져야할 때 클래스 변수로 선언한다.
  • 클래스가 로딩될 때 생성되어 종료될 때 까지 유지되는 클래스 변수는 public을 붙이면 같은 프로그램 내에서 어디서든 접근 할 수 있는 전역변수가 된다.
  • 인스턴스를 생성하지 않고 ‘클래스이름.클래스명’을 통해 접근 가능하다.

 

지역 변수

  • 메서드 내에서 선언되며 메서드 내에서만 사용할 수 있는 변수이다.
  • 메서드가 실행될 때 메모리를 할당받으며 메서드가 끝나면 소멸된다.

추가로 클래스변수와 인스턴스변수를 얘기하자면...

클래스변수는 인스턴스변수에 static만 붙여주면 된다 했다. 

그렇게 나누는 상황을 코드가 아닌 글로 설명하자면

 

카드 클래스를 만든다 가정하였을 때 속성으로 무늬, 숫자, 폭, 높이가 있을 수 있다.

여기서 무늬와 숫자는 카드별 다른 값을 가져야 하므로 인스턴스변수 여야하고

폭과 높이는 모든 카드가 같은 값이 어야 하므로 클래스변수 여야한다.

 

2023.11.28 - [About Programming/Java] - Java 인스턴스 메서드 vs 클래스 메서드, static을 언제 붙이나?

블로그의 정보

Hello 춘기's world

볼빵빵오춘기

활동하기