인스턴스 변수 [ Instance variable ]
ㅡ 클래스 영역에서 선언 ( 멤버 변수? ), 클래스의 인스턴스를 생성할 때 만들어진다.
ㅡ 인스턴스 변수를 사용하기 위해서는 먼저 인스턴스 생성 → Class 변수명 = new Class();
ㅡ 독립적인 저장 공간을 가지므로 서로 다른 값을 가질 수 있다.
ㅡ 고유 상태를 유지해야하는 속성인 경우(자신만의 상태를 유지해야 하는 경우), 인스턴스 변수로 선언
클래스 변수 [ Class variable ]
ㅡ 인스턴스 변수 앞에 static 붙인다.
ㅡ 인스턴스를 생성하지 않고도 항시 사용 가능 / 클래스명.클래스변수명으로 바로 접근 가능
ㅡ 모든 인스턴스가 공통된 저장 공간 공유
ㅡ 한 클래스의 모든 인스턴스들이 공통값을 유지해야하는 속성인 경우, 클래스 변수로 선언
ㅡ 클래스가 메모리에 로딩될 때 생성되고 프로그램이 종료될 때 까지 유지
지역 변수 [ Local variable ]
ㅡ 메소드 내에서 선언되고 메소드 내에서만 사용
ㅡ 메소드를 벗어나면 소멸되어 사용 불가
* 클래스에서 선언되는 인스턴스 변수와 클래스 변수는 상대적으로 상위 개념에서 선언되기에 전역 변수
class Variable{
int a; // 인스턴스 변수
static int b; // 클래스 변수
void stop(){
int c; // 지역 변수
System.out.println("인스턴스 메서드입니다.");
}
static void move(){
System.out.println("스태틱 메서드입니다");
}
}
public class Example{
public static void main(String[] args) {
Variable vr = new Variable(); // 객체 선언과 생성
vr.a = 7; // 인스턴스 변수 초기화
vr.stop(); // 인스턴스 메서드 호출
Variable.b = 5; // 클래스 변수(스태틱 변수) 초기화
Variable.move(); // 스태틱 메서드(클래스 메서드) 호출
}
}
위의 코드를 보면 인스턴스 변수는 사용하기 위해 Example 클래스에서 객체 생성 후 사용된 반면에, 클래스 변수는 Variable 클래스 이름으로 바로 사용한 걸 볼 수 있다.
static 메서드와 인스턴스 메서드의 관계
◆ staitc 메서드는 인스턴스 변수, 메서드를 호출할 수 없다. / 인스턴스 메서드는 static 변수, 메서드를 호출할 수 있다.
→ 왜 static 메서드는 인스턴스 변수를 호출할 수 없나? → static 메서드는 항상 호출이 가능해야한다 / 객체 생성을 해야 사용할 수 있는 인스턴스 변수, 메서드의 생성 여부를 알 수 없다.
인스턴스 메서드 ←→ 인스턴스 메서드 : 가능
static 메서드 ←→ static 메서드 : 가능
staitc 메서드엔 매개 변수를 사용하거나, static 변수를 사용
'Java' 카테고리의 다른 글
오버로딩 ( Overloading ) (0) | 2023.01.06 |
---|---|
메서드 ( Method ) (0) | 2023.01.05 |
객체 배열(Object Array) (0) | 2023.01.03 |
리터럴(literal) / 기본 타입(primitive type) / 참조 타입(reference type) / 메모리 영역 (0) | 2023.01.03 |
equals()와 == (0) | 2023.01.03 |
댓글