Static 변수(클래스 변수)
여러 인스턴스가 하나의 값을 공유할 필요가 있는 경우 사용된다.
static 변수는 처음 프로그램이 로드 될 때 데이터 영역에 생성된다.
인스턴스의 이름과는 상관없이 클래스 이름으로 참조하여 사용하면 된다.
확인해보기
아래와 같은 Student객체가 있을때 serialNum은 static변수입니다.
인스턴스가 생길때 마다. 숫자가 하나씩 늘어날겁니다.
인스턴스 이름과 무관하게 증가하는 변수를 확인할 수 있고, 클래스명으로 호출되는것을 확인할 수 있습니다. (인스턴스 생성과도 무관하게사용 가능)
static 메소드는 내부에서 인스턴스 변수를 사용할 수 없다.
WHY?
인스턴스가 생성되면 스택 메모리가 인스턴스 주소를 갖고 힙 메모리에 인스턴스 변수가 들어간다.
static변수는 인스턴스가 생성되지 않아도 데이터 영역에 있기 때문에 인스턴스 메소드에서도 호출이 가능하지만,
인스턴스 변수는 인스턴스가 새로 생성이 될 때만 만들어 지는 변수이기 때문에 static변수에서 호출할 수 없다.
변수 유형 | 선언 위치 | 사용 범위 | 메모리 | 생성 & 소멸 |
지역변수 (Local variable) |
함수 내부에 선언 | 함수 내부에서만 사용 | 스택 |
함수가 호출될 때 생성되고 함수가 끝날때 소멸됨
|
멤버 변수 (Instance variable) |
클래스 멤버 변수로 선언 | 클래스 내부에서 사용하고 private이 아니면 참조 변수(instance명)로 다른 클래스에서도 사용 가능 | 힙 |
인스턴스가 생성될 때 힙에 생성되고, 가비지 컬렉터(GC)가 메모리를 수거할 때 소멸됨
|
Static변수(Class 변수) | Static 예약어를 사용하여 클래스 내부에 선언 | 클래스 내부에서 사용하고 private이 아니면 클래스 이름으로 다른 클래스에서도 사용 가능 | 데이터 영역 |
프로그램이 처음 시작할 때 상수와 함께 데이터 영역에 생성되고 프로그램이 끝나고 메모리를 해제할 때 소멸됨
|
'공부 > 자바 (Java)' 카테고리의 다른 글
[Java] 상속(Inheritance), 메서드 오버라이딩, 다형성, 다운캐스팅, 업캐스팅 (0) | 2021.12.21 |
---|---|
[Java] 싱글톤 패턴 (Singleton Pattern) -static (0) | 2021.12.08 |
[Java] 인스턴스, 힙 메모리, 생성자, 정보 은닉 (0) | 2021.12.04 |
IntelliJ 단축키 익히기 (for mac) (0) | 2021.12.02 |
Java HashSet (1) | 2020.09.20 |
댓글