변수와 메서드에 대하여
변수는 선언된 위치를 확인하여 변수의 종류를 파악할 수 있다.
먼저 멤버변수를 제외한 나머지 변수들은 지역변수이고,
멤버변수 중 static이 붙은 것은 클래스변수, 붙지 않은 것은 인스턴스변수 라는 말을 익혀보자.
그럼 아래 코드예제로 더 자세히 알아보자.
class Variables {
int tv; // 인스턴스변수
static int tv2; // 클래스변수(== static변수, 공유변수) >> 클래스영역
void method() {
int tv3 = 0; // 지역변수 >> 메서드영역
}
}
tv >> 클래스영역에 선언되었으면서 static이 붙지 않았으므로 인스턴스변수
tv2 >> 클래스영역에 선언되었으면서 static이 붙었으므로 클래스변수
tv3 >> 메서드영역에 선언되었으므로 지역변수
표로 간단하게 정리해보자면 이렇다.
변수의 종류 | 선언위치 | 생성시기 |
클래스변수 | 클래스 영역 | 클래스가 메모리에 올라갈 때 |
인스턴스변수 | 인스턴스가 생성되었을 때 | |
지역변수 | 클래스 영역 이외의 영역(메서드 생성자, 초기화 블럭 내부) | 변수 선언문이 수행되었을 때 |
더 자세히 알아보자.
1. 인스턴스변수
: 인스턴스는 독립적인 저장공간을 가지므로 서로 다른 값을 가질 수 있다.
인스턴스마다 고유한 상태를 유지해야하는 속성의 경우, 인스턴스변수로 선언한다.
+ 클래스영역에 선언, 클래스의 인스턴스를 생성할 때 만들어진다.
그렇기에 인스턴스변수의 값을 읽어 오거나 저장하기 위해서는 먼저 인스턴스 생성해야한다.
2. 클래스변수
: 인스턴스변수와는 달리, 클래스변수는 모든 인스턴스가 공통된 저장공간(변수)을 공유하게 된다.
한 클래스의 모든 인스턴스들이 공통적인 값을 유지해야하는 속성의 경우, 클래수변수로 선언해야 한다.
+ 클래스 변수를 선언하는 방법은 인스턴스변수 앞에 static을 붙이기만 하면 된다.
클래스 변수는 인스턴스를 생성하지 않고도 언제라도 바로 사용할 수 있다는 특징이 있으며,
'클래스이름.클래스변수'와 같은 형삭으로 사용한다.
예를 들어 Variables클래스의 클래스변수 tv를 사용하려면 'Variables.tv'와 같이 하면 된다.
public을 앞에 붙이면 같은 프로그램 내에서 어디서나 접근할 수 있는 '전역변수'의 성격을 갖는다.
적용 > 클래스변수와 인스턴스변수의 차이를 이해하기 위한 예로 카드 게임에 사용되는 카드를 클래스로 정의해보자.
어떤 속성을 클래스 변수로 선언할 것이며, 또 어떤 속성들을 인스턴스변수로 선언할 것인지 한번 생각해보자.
class Card{
String kind; // 무늬
int number; // 숫자
static int width = 100; // 폭
static int height = 200; // 높이
}
'JAVA' 카테고리의 다른 글
FileSplit - 파일 크기분할 (0) | 2022.04.05 |
---|---|
[JAVA] 입출력( Input / Output ) - 바이트기반, 문자기반 입력스트림의 차이점 (0) | 2022.03.14 |
1.컬렉션 프레임웍 - 1.1 컬렉션 프레임웍의 핵심 인터페이스 (0) | 2022.02.04 |
선택정렬, 삽입정렬구현 (0) | 2022.01.17 |
Chapter 05 배열 (Array) - 220103~ (0) | 2022.01.13 |