정적변수
정적변수는 변수를 정의할때 앞에 static을 붙여서 사용한다.
static 데이터형 변수이름 = 초기화;
같은 클래스에서 객체를 만들때 각각의 객체는 자신만의 필드를 갖는데
이들 필드는 객체(인스턴스)마다 별도로 생성되기 때문에 인스턴트변수라고 한다.
객체를 만들때 만들어진 객체는 각각의 별도의 기억공간을 갖게 되며 각 객체마다 서로 다른 값을 갖는다.
그러나 static으로 선언된 변수는 모든 객체에서 값을 공유하기 때문에 정적변수 라고 한다.
즉 하나의 클래스는 인스턴트변수(객체 생성시 각각의 값을 갖는 변수)와 정적변수(만들어진 모든 객체가 값을 공유하는 변수) + 메서드로 이루어져 있다.
정적변수의 접근 방법
사실 변수가 올라가는 영역은 static영역과 heap영역이 있는데
인스턴트 변수는 프로그램을 실행하고 객체가 생성될때 heap 영역을 할당 받아 사용하지만
정적변수 static은 프로그램이 실행될때 static 영역에 선언되어 값을 공유하게 된다.
또한 객체(heap)에서 static 영역에 접근 할 수 없기 때문에 static 영역에 접근하기 위해서는 클래스에서 접근해야하며 객체를 생성하지 않고도 접근이 가능하다.
객체를 생성하지 않고도 정적변수인 sint에 접근하여 초기화가 가능하지만 인스턴트 변수 iint는 객체가 생성되지 않아 heap영역에 메모리를 할당 받지 못했기 때문에 접근이 불가하여 오류가 발생한다.
정적 메서드는 static이 붙은 메서드로 객체가 생성되기 전에 사용할 수 있기 때문에 클래스내의 인스턴트 변수를 사용 할 수 없다. 다른이름으로 클래스메서드라고도 한다.
정적 메서드 또한 static 영역에 할당되기 때문에 클래스에서 접근해야한다.
'Old > JAVA ' 카테고리의 다른 글
JAVA this와 super 키워드 (1) | 2018.08.22 |
---|---|
JAVA 상속 (0) | 2018.08.21 |
JAVA 초기화와 생성자 (0) | 2018.08.21 |
JAVA 오버로딩(Overloading) (0) | 2018.08.20 |
JAVA 클래스와 객체 (0) | 2018.08.20 |