개발 일지

[Java] 변수의 세가지 타입 (클래스 변수, 인스턴스 변수, 지역 변수) 본문

Java

[Java] 변수의 세가지 타입 (클래스 변수, 인스턴스 변수, 지역 변수)

junjun_ 2022. 11. 3. 23:42

자바 스터디 1주 차 발표 준비 자료입니다.

https://github.com/WanOnPreStudy/JavaQuestionStudy

 

GitHub - WanOnPreStudy/JavaQuestionStudy: 백엔드 자바 질문 스터디

백엔드 자바 질문 스터디. Contribute to WanOnPreStudy/JavaQuestionStudy development by creating an account on GitHub.

github.com


간단하게 정리하고 들어가자면…

  • 자바의 변수는 선언된 위치에 따라서 클래스 변수, 인스턴스 변수, 지역 변수로 구분합니다
  • 클래스 변수와. 인스턴스 변수는 묶어서 멤버 변수라고도 하며 클래스 영역 내에 선언되어 있습니다
  • 멤버 변수 중 static 붙은 것은 클래스 변수, 붙지 않는 것이 인스턴스 변수입니다.
  • 클래스 영역 이외에 위치에 선언된 변수는 지역변수입니다. (메서드, 생성자, 초기화 블록 내부)
public class Test {

	static int classValue = 5; // 클래스 변수
	int instanceValue = 5; // 인스턴스 변수
	
	void method() {
		int localValue = 5; // 지역 변수
	}
}

 

인스턴스 변수

  • 인스턴스 변수는 인스턴스가 생성될 때 생성됩니다.
  • 그렇기 때문에 인스턴스 변수의 값을 읽어오거나 저장하려면 객체의 인스턴스를 먼저 생성해야 합니다.
  • 인스턴스가 생성될 때마다 생성됨으로 각기 다른 값을 가질 수 있습니다.
  • 각각의 인스턴스마다 고유의 값을 가져야 할 때는 인스턴스 변수로 선언합니다.

접근방법

Test test = new Test(); 

System.out.print(test.instanceValue);
클래스에 대한 인스턴스 객체를 생성하고, 인스턴스 객체를 통해 변수에 접근할 수 있습니다.

 

클래스 변수

  • 클래스 변수는 인스턴스 변수에 static만 붙여주면 됩니다.
  • 클래스 변수는 클래스가 로딩될 때 생성되어(그러므로 메모리에 딱 한 번만 올라갑니다.) 종료될 때까지 유지됩니다.
  • 모든 인스턴스 가 하나의 저장공간을 공유함으로 공통된 값을 공유하게 됩니다.
  • 그렇기 때문에 한 클래스의 모든 인스턴스들이 공통적인 값을 가져야 할 때 클래스 변수로 선언합니다.
  • 또한 인스턴스 변수의 접근법과 다르게 인스턴스를 생성하지 않고 클래스 이름. 클래스 변수명을 통해서 접근할 수 있습니다.

접근방법

System.out.print(Test.classValue); 
 클래스명으로(인스턴스 없이) 바로 접근 가능합니다.

 

지역 변수

  • 변수 선언문이 수행되었을 때 생성됩니다.
  • 메서드 내에서 선언되며 메서드 내에서만 사용할 수 있는 변수입니다.
  • 메서드가 끝나면 소멸되어 사용할 수 없게 됩니다.

접근방법

public class Test {

	static int classValue = 5; // 클래스 변수
	int instanceValue = 5; // 인스턴스 변수
	
	void method() {
		int localValue = 5; // 지역 변수
		System.out.print(localValue); //지역변수 접근 
	}
}
선언된 메서드 내에서 변수명으로 접근 가능합니다.

 

정리

 

+ 추가

Java 8 버전 이전 에는 클래스 컴파일 후 JVM( Java Virtual Machine )에 의해 생성된 메서드 영역 이라는 비힙 메모리의 별도 섹션에 클래스의 정적 변수가 저장되었습니다

 

Java 8 이후에는 정적 변수 및 메서드는 힙 메모리에 저장됩니다.