본문 바로가기
Java & 스프링/Java

[Java] 인스턴스 변수와 클래스 변수

by hjhello423 2019. 4. 19.

자바에의 클래스에서 사용할 수 있는 변수의 종류는 총 3가지가 있다.

이 3가지에 대해서 알아보자.

 

 

변수의 종류는 선언된 위치에 따라 정해진다.

따라서 3가지의 변수 종류를 구분하기 위해서는 해당 변수가 선언된 위치를 파악해야 한다.

 

종류 선언위치 생성시기
클래스 변수(static 변수)

클래스의 내의 변수 선언 위치

(클래스 영역)

클래스가 메모리에 올라갈때
인스턴스 변수 객체(인스턴스)가 생성될때
지역 변수

메서드, 생성자, 초기화 블럭등의 내부

(클래스 영역 외의 영역)

변수의 선언문이 실행 될때

 

아래와 같은 소스를 작성했다고 가정해보자

public class TestClass {
	int intstance;
	static int staticVal;
	
	void method() {
		int local =  0;
	}
}

 

위의 코드는 아래와 같이 클래스 영역과 메서드 영역으로 나누어진다.

 

1. 클래스 변수

  • 선언부에 'statis'을 붙인다.
  • 인스턴스를 생성하지 않아도 사용 가능하다.
  • 클래스 메서드는 인스턴스 변수를 사용할 수 없다.
  • 클래스 변수는 모든 인스턴스(객체)가 공통 메모리 공간을 사용하여 같은 주소를 참조하게 된다.
  • 모든 인스턴스가 클래스 변수의 값을 공유하게 된다는 뜻이다.
  • 클래스가 로딩될 때 생성되어 프로그램이 종료될 때까지 유지되는 특징을 지닌다.

 

2. 인스턴스 변수

  • 인스턴스가 생성될 때 생성된다.
  • 각각의 인스턴스 별로 독립적인 저장공간을 가진다.
  • 모든 인스턴스가 서로 다른 값을 가질 수 있다.

 

3. 지역변수

  • 위에서 지역 변수인 local은 메서드 영역에서 선언되었다.
  • 메서드가 호출되어 종료될 때까지 유효하며 종료된 이후에는 해당 변수를 사용할 수 없다.
  • {} 블럭 내의 범위에서만 사용이 가능하다.

 

 

아래의 글에서 클래스 변수와 인스턴스를 예제를 통해 비교해 보자

2019/04/19 - [자바/기본] - 클래스 변수와 인스턴스 변수의 비교

 

 

 

 

반응형

'Java & 스프링 > Java' 카테고리의 다른 글

[Java] JVM이란?  (0) 2019.04.20
[Java] 클래스 변수와 인스턴스 변수의 비교  (0) 2019.04.19
자바의 기본형(변수 타입)  (0) 2019.04.18
Java의 특징과 JVM, JDK, JRE  (0) 2019.04.18
Java 환경변수 설정 하기  (0) 2019.04.17

댓글