상세 컨텐츠

본문 제목

[자바의 정석] (Ch6. 객체지향개념) 선언 위치에 따른 변수의 종류

프로그래밍 언어/Java

by hyuga_ 2023. 9. 26. 17:36

본문

이번에는 변수의 타입이 아니라 변수의 종류에 대한 이야기다.

선 요약정리

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

변수 종류 설명
iv (인스턴스변수)  - 클래스 영역에 속함
  - 인스턴스가 생성될 때 생성
  - 객체와 인스턴스 변수는 묶임
  - 객체 생성 후 사용 가능
cv (클래스변수) = static + iv - 클래스 영역에 속함
  - 클래스가 메모리에 올라갈 때 생성
  - 객체 생성 없이 사용 가능
lv (지역변수) - 메서드 영역에 속함
  - 메서드 내 변수 선언문이 수행될 때 생성

 

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

변수의 종류는 어디에 선언했느냐에 따라 3가지 종류로 나뉜다.

  1. iv (instance variable)
  2. cv (class variable = static + iv)
  3. lv (local variable, 지역변수)

 

하나의 클래스의 구조는 선언부와 구현부로 나눌 수 있지만, 

다른 필터로 보면 메서드 영역과 이를 제외한 나머지인 클래스 영역으로도 나눌 수 있다.

 

이중에서

  • 클래스 영역에 속하면 iv, cv
  • 메서드 영역에 속하면 lv

이다. 

즉 메서드 영역에 속하지 않으면 클래스 영역에 속한 것이다.

 

클래스 영역에는 선언문만 가능하다. (변수 선언 or 메서드 선언)

  • 메서드 선언의 경우, void method() 뒤에 블럭 ({ … })까지 합해서 메서드 정의라고 부른다.

'System.out.println();'이라든지, 'y = x + 3;' 등 무언가 명령하는 일반적인 문장은 들어갈 수 없다.

 

변수와 메서드 중에 무엇을 더 먼저 선언해야하는가?는 정해진 바가 없다.

그러나 일반적으로는 변수를 위에 선언하고, 아래에 메서드 선언문들을 위치시킨다. 

 

scope

인스턴스 변수, 클래스 변수, 지역 변수

이제 선언위치에 따른 변수의 종류(클래스 변수, 인스턴스 변수, 지역변수)는 구별할 수 있을 거고..

선언된 변수가 어디까지 영향을 미치는지를 scope라고 한다.

iv, cv는 클래스 전체에 영향을 미치고, lv는 선언된 시점~메서드 끝까지 영향을 미친다.

 

iv가 선언되는 시점은 인스턴스가 생성되었을 때이다. 인스턴스가 생성되면, 클래스의 내용을 보고 해당 iv들을 생성한다. 

프로그래밍 관점에서 보면 객체는 사실 iv를 여러개 묶어놓은 것이다. (Time 클래스 참고) 

 

 

클래스 변수의 생성시기인 클래스가 메모리에 올라갈 때는 무엇을 뜻할까?

  • 메모리에 올라간다 = CPU에서 쓰기 위해 해당 데이터를 SSD에서 메모리에 로딩

 

cv는 iv와 달리 객체 생성을 안해도 자동으로 만들어진다.

  • 쉽게 얘기하면 cv는 아무때나 사용 가능하다.
  • iv는 객체 생성을 해야 쓸 수 있다.
  • lv는 해당 변수가 선언되는 메서드가 수행될 때 생성된다.

 

관련글 더보기