본문 바로가기
공부/자바 (Java)

[Java] static 변수, static메소드(클래스 메소드), 인스턴스 변수, 인스턴스 메소드

by Lagooni 2021. 12. 8.

Static 변수(클래스 변수)

여러 인스턴스가 하나의 값을 공유할 필요가 있는 경우 사용된다.

static 변수는 처음 프로그램이 로드 될 때 데이터 영역에 생성된다.

인스턴스의 이름과는 상관없이 클래스 이름으로 참조하여 사용하면 된다.


확인해보기

아래와 같은 Student객체가 있을때 serialNum은 static변수입니다.

인스턴스가 생길때 마다. 숫자가 하나씩 늘어날겁니다.

Student 객체
테스트
결과

인스턴스 이름과 무관하게 증가하는 변수를 확인할 수 있고, 클래스명으로 호출되는것을 확인할 수 있습니다. (인스턴스 생성과도 무관하게사용 가능)


static 메소드는 내부에서 인스턴스 변수를 사용할 수 없다.

studentName은 인스턴스 변수이다.

WHY? 

인스턴스가 생성되면 스택 메모리가 인스턴스 주소를 갖고 힙 메모리에 인스턴스 변수가 들어간다.

static변수는 인스턴스가 생성되지 않아도 데이터 영역에 있기 때문에 인스턴스 메소드에서도 호출이 가능하지만,

인스턴스 변수는 인스턴스가 새로 생성이 될 때만 만들어 지는 변수이기 때문에 static변수에서 호출할 수 없다.

변수 유형 선언 위치 사용 범위 메모리 생성 & 소멸
지역변수
(Local variable)
함수 내부에 선언 함수 내부에서만 사용 스택
함수가 호출될 때 생성되고 함수가 끝날때 소멸됨
멤버 변수
(Instance variable)
클래스 멤버 변수로 선언 클래스 내부에서 사용하고 private이 아니면 참조 변수(instance명)로 다른 클래스에서도 사용 가능
인스턴스가 생성될 때 힙에 생성되고, 가비지 컬렉터(GC)가 메모리를 수거할 때 소멸됨
Static변수(Class 변수) Static 예약어를 사용하여 클래스 내부에 선언 클래스 내부에서 사용하고 private이 아니면 클래스 이름으로 다른 클래스에서도 사용 가능 데이터 영역
프로그램이 처음 시작할 때 상수와 함께 데이터 영역에 생성되고 프로그램이 끝나고 메모리를 해제할 때 소멸됨

 

댓글