[작성일: 2023. 01. 25]
변수(Field)
- 변수의 선언위치가 변수의 종류와 범위(Scope)를 결정함.
- 클래스 안의 변수에는 크게 세 종류가 있음.
- 클래스 변수와 인스턴스 변수를 Field라고 함.
class variables { //1. 클래스 영역
int iv; // 인스턴스 변수(iv)
static int cv; // 클래스 변수(static 변수, cv)
void method() { // 2. 메서드 영역
int iv = 0; // 지역변수(lv)
}
}
변수의 종류 | 선언위치 | 생성 시기 |
클래스 변수 (class variable) |
클래스 영역 | 클래스가 메모리에 올라갈 때(자동, 객체 생성 필요없음.) |
인스턴스 변수 (instance variable) |
인스턴스(객체) 생성시 | |
지역 변수 (local variable) |
메서드 영역 | 변수 선언문 수행 시(메서드 종료시 자동 소멸) 메서드, 생성자, 초기화 블럭 내부에 선언 |
클래스 변수(정적 변수)
- 모든 객체가 공유하는 변수
- 변수 앞에 static 키워드를 사용함.
- 객체 생성 없이도 사용 가능하며 클래스명.클래스변수명과 같이 사용함.
- ex) Card.width = 200;
- 클래스가 로딩될 때 생성되고 프로그램이 종료될 때 소멸함.
- 아무 때나 사용 가능하며, 공통적으로 유지되어야 하는 속성에 static을 사용함.
인스턴스 변수(전역 변수)
- 인스턴스 = 객체
- ex) 트럭은 객체이다. 트럭은 자동차의 인스턴스이다.
- 설계도로 만든 제품 - 인스턴스
- 각 인스턴스의 개별적인 저장공간. 인스턴스마다 다른 값 저장 가능.
- 객체 생성 시에 생성되고 참조변수가 없을 때 가비지컬렉터에 의해 자동제거됨.
- 변수 앞에 static 없음
- 객체마다 다른 개성을 가지고 있으며 객체 생성을 해야만 사용 가능한 변수
class Card {
String kind; // 무늬
int number; // 숫자 ➡️ 인스턴스 변수(iv)
// 개별값 , 객체마다 다르게 유지되어야 하는 값
static int width = 100; // 폭
static int height = 200; // 높이 ➡️ 클래스 변수(cv)
Card c = new Card(); // 객체 생성
// 객체 사용
c.kind = "HEART";
c.number = 3;
// cv는 앞에 참조변수를 붙여도 되지만 클래스 이름을 붙여주는 것이 좋음
Card.width = 200;
Card.height = 200;
}
지역 변수
- 메서드(함수), 조건문 내에서 선언되며 메서드의 종료와 함께 소멸
- 메서드 영역이 끝나면 소멸되기 때문에 변수 이름이 같아도 상관없음.
- 매개변수도 지역변수
int add(int x, int y) {
int result = x + y;
return result; // 메서드 영역
} // 메서드 종료시 지역변수 소멸
// 다른 메서드 영역에서 같은 변수명 사용해도 괜찮음
int multiply(int x, int y) {
int result = x * y;
return result; // 메서드 영역
}
🐣 해당 게시글은 자바의 정석(남궁성 님) 영상으로 함께 공부하며 요약/정리한 글입니다.
🐣 입문 개발자가 작성한 글이므로 틀린 내용이나 오타가 있을 수 있습니다.