* JAVA에서의 Static?
static(정적)은 '고정된'이란 의미를 가지고 있다. 정적 멤버는 클래스에 고정된 멤버로서 객체를 생성하지 않고 사용할 수 있는 필드와 메소드를 말한다. 이들을 각각 정적 필드, 정적 메소드라고 말한다. 정적 멤버는 객체 (인스턴스)에 소속된 멤버가 아니라 클래스에 소속된 멤버이기 대문에 클래스 멤버라고도 한다.
* 정적 멤버 선언
정적 필드와 정적 메소드는 클래스에 고정된 멤버이므로 클래스 로더가 클래스(바이트 코드)를 로딩해서 메소드 메모리 영역에 적재할 때 클래스 별로 관리된다. 따라서 클래스의 로딩이 끝나면 바로 사용할 수 있다! 객체를 생성할 필요 없이 클래스가 메모리에 로딩되면 바로 사용할 수 있는 필드와 메소드인 것이다.
필드를 선언할 때 인스턴스 필드로 선언할 것인가, 아니면 정적 필드로 선언할 것인가의 판단 기준은 객체마다 가지고 있어야 할 데이터라면 인스턴스 필드로 선언하고, 객체마다 가지고 있을 필요가 없는 공통적인 데이터라면 정적 필드로 선언하는 것이 좋다. 메소드는 인스턴스 변수를 사용한다면 인스턴스 메소드로 선언하고 인스턴스 필드를 사용하지 않는다면 정적 메소드로 선언한다.
* 정적 메소드와 블록 선언 시 주의할 점
정적 메소드와 정적 블록을 선언할 때 주의할 점은 객체가 없어도 실행된다는 특징 때문에, 이들 내부에 인스턴스 필드나 인스턴스 메소드를 사용할 수 없다. 또한 객체 자신의 참조인 this 키워드도 사용이 불가능하다.
따라서 정적 메소드와 정적 블록에서 인스턴스 멤버를 사용하고 싶다면 다음과 같이 객체를 먼저 생성하고 참조 변수로 접근해야 한다.
static void Method3() {
className obj = new ClassName(0;
obj.field1 = 10;
obj.method1();
}
'JAVA' 카테고리의 다른 글
객체 복제 (0) | 2021.08.11 |
---|---|
추상 클래스 (Abstract class) (0) | 2021.07.29 |
Map Collection (0) | 2021.07.08 |
Collection Framework (0) | 2021.07.05 |
Interface(인터페이스) (0) | 2021.06.30 |