이번에는 변수의 타입이 아니라 변수의 종류에 대한 이야기다.
선언위치에 따른 변수의 종류
변수 종류 | 설명 |
iv (인스턴스변수) | - 클래스 영역에 속함 |
- 인스턴스가 생성될 때 생성 | |
- 객체와 인스턴스 변수는 묶임 | |
- 객체 생성 후 사용 가능 | |
cv (클래스변수) = static + iv | - 클래스 영역에 속함 |
- 클래스가 메모리에 올라갈 때 생성 | |
- 객체 생성 없이 사용 가능 | |
lv (지역변수) | - 메서드 영역에 속함 |
- 메서드 내 변수 선언문이 수행될 때 생성 |
변수의 종류는 어디에 선언했느냐에 따라 3가지 종류로 나뉜다.
하나의 클래스의 구조는 선언부와 구현부로 나눌 수 있지만,
다른 필터로 보면 메서드 영역과 이를 제외한 나머지인 클래스 영역으로도 나눌 수 있다.
이중에서
이다.
즉 메서드 영역에 속하지 않으면 클래스 영역에 속한 것이다.
클래스 영역에는 선언문만 가능하다. (변수 선언 or 메서드 선언)
'System.out.println();'이라든지, 'y = x + 3;' 등 무언가 명령하는 일반적인 문장은 들어갈 수 없다.
변수와 메서드 중에 무엇을 더 먼저 선언해야하는가?는 정해진 바가 없다.
그러나 일반적으로는 변수를 위에 선언하고, 아래에 메서드 선언문들을 위치시킨다.
이제 선언위치에 따른 변수의 종류(클래스 변수, 인스턴스 변수, 지역변수)는 구별할 수 있을 거고..
선언된 변수가 어디까지 영향을 미치는지를 scope라고 한다.
iv, cv는 클래스 전체에 영향을 미치고, lv는 선언된 시점~메서드 끝까지 영향을 미친다.
iv가 선언되는 시점은 인스턴스가 생성되었을 때이다. 인스턴스가 생성되면, 클래스의 내용을 보고 해당 iv들을 생성한다.
프로그래밍 관점에서 보면 객체는 사실 iv를 여러개 묶어놓은 것이다. (Time 클래스 참고)
클래스 변수의 생성시기인 클래스가 메모리에 올라갈 때는 무엇을 뜻할까?
cv는 iv와 달리 객체 생성을 안해도 자동으로 만들어진다.
[자바의 정석 스터디] Ch3. 연산자/ Ch4. 조건문과 반복문 (0) | 2024.03.25 |
---|---|
[자바의 정석 스터디] Ch.2 변수 (0) | 2024.03.08 |
[자바의 정석] (Ch.6 객체지향개념) 클래스 변수, 인스턴스 변수 (0) | 2023.09.28 |
[자바의 정석] (Ch6. 객체지향개념) 클래스의 정의 (0) | 2023.09.26 |
[자바의 정석] (Ch6. 객체지향개념) 클래스와 객체 (0) | 2023.09.26 |