선언위치에 따른 변수의 종류
변수는 '변수의 선언 위치'에 따라 세 종류로 나뉜다. 멤버변수를 제외한 변수들은 '지역변수'이고 멤버변수 중 static이 붙은 변수는 '클래스 변수', 붙지 않은 것은 '인스턴스 변수'이다.
class Variable
{
int iv; // 인스턴스 변수
static int cv; // 클래스 변수(static 변수, 공유변수)
void method()
{
int lv = 0; // 지역변수
}
}
변수의 종류 | 선언위치 | 생성시기 |
클래스 변수 | 클래스 영역 | 클래스가 메모리에 올라갈 때 |
인스턴스 변수 | 클래스 영역 | 인스턴스가 생성되었을 때 |
지역 변수 | 클래스 영역 이외의 영역(메서드, 생성자, 초기화 블럭내부) | 변수 선언문이 수행되었을 때 |
클래스 변수와 인스턴스 변수
클래스 변수와 인스턴스 변수를 보다 쉽게 이해하기 위해 카드 게임에 사용되는 카드를 예로 들어보자.
카드를 정의하기 위해서는 속성과 기능에 대해 알아야 한다. 속성은 무늬, 숫자, 폭, 높이 정도로 생각할 수 있다. 기능은 카드를 뒤집을 수 있고 카드의 역학관계등을 이야기 할 수 있지만 여기에서는 속성을 통해 객체지향의 변수를 이해해보자. 카드는 자신만의 무늬와 숫자를 유지하고 있어야 한다. 무늬와 숫자는 카드의 종류에 따라 달라지기 때문에 무늬와 숫자를 객체지향 언어에서는 '인스턴스 변수'로 표현 할 수 있다. 반면 카드의 폭과 높이는 종류에 따라 달라지지 않고 공통적으로 같기 때문에 '클래스 변수'로 표현한다.
class Card {
String kind; // 무늬
int number; // 숫자
static int width = 100; // 폭
static int height = 250; // 높이
}
출처:자바의 정석 기초편(저자: 남궁성, 출판사: 도우출판)
'java > 객체지향' 카테고리의 다른 글
[객체지향] static 메서드와 인스턴스 메서드 (0) | 2021.07.09 |
---|---|
[객체지향] return문과 반환값 (0) | 2021.07.09 |
[객체지향] 메서드 (0) | 2021.07.08 |
[객체지향] 객체 (0) | 2021.07.05 |
[객체지향]객체지향 언어, 클래스와 객체 (0) | 2021.07.05 |