KoreanFoodie's Study
6-1. 정적 멤버와 static : 정적 메소드, 정적 초기화 블록, 싱글톤 본문
정적(static)
정적 멤버는 클래스에 고정된 멤버로서 객체를 생성하지 않고 사용할 수 있는 필드와 메소드를 말한다.
클래스가 메모리로 로딩되면 정적 멤버를 바로 사용할 수 있는데, 클래스 이름과 함께 도트(.) 연산자로 접근한다.
int a = myClass.value;
myClass.doSomething(a);
정적 초기화 블록
정적 필드는 다음과 같이 필드 선언과 동시에 초기값을 주는 것이 보통이다.
그러나 계산이 필요한 초기화 작업의 경우, 정적 블록(static block)을 사용할 수 있다.
static
{
...
}
정적 블록은 클래스가 메모리로 로딩될 때 자동적으로 실행된다. 정적 블록은 클래스 내부에 여러 개가 선언되어도 상관없고, 선언된 순서대로 실행된다.
public class TV
{
static String company = "Samsung";
static String model = "LCD";
static String info;
static
{
info = conpany + "-" + model;
}
}
위를 보면, info를 정적 블록을 이용해 초기화 했음을 알 수 있다. 정적 멤버는 객체에 종속된 것이 아니라 클래스에 종속된 것이므로, this 키워드를 사용하면 에러가 난다.
싱글톤 (Singleton)
가끔 전체 프로그램에서 단 하나의 객체만 만들도록 보장해야 하는 경우가 있다. 그 경우 해당 객체를 싱글톤(Singleton)이라고 한다. 싱글톤을 만들기 위해서는 클래스 외부에서 new 연산자로 생성자를 호출할 수 없도록 막아야 한다(private 접근 제한자).
그리고 자신의 타입인 정적 필드를 하나 선언하고 자신의 객체를 생성해 초기화한다. 참고로 클래스 내부에서는 new 연산자로 생성자 호출이 가능하다. 외부에서 호출할 수 있는 정적 메소드인 getInstance() 를 선언하고 정적 필드에서 참조하고 있는 자신의 객체를 리턴해준다.
public class myClass
{
// 정적 필드
private static myClass singleton = new myClass();
// 생성자
private myClass() {}
// 정적 메소드
static myClass getInstance()
{
return singleton;
}
}
위의 코드에서, 외부의 객체에서 해당 변수를 참조하는 방법은 오직 getInstance() 메소드를 통해서만 이루어진다.
'Tutorials > Java' 카테고리의 다른 글
8-1. 자바 인터페이스의 역할과 선언, 구현 예제 살펴보기 (0) | 2021.09.15 |
---|---|
7. 자바의 상속 : 타입 변환과 다형성 (0) | 2021.09.15 |
6-3. 어노테이션(Annotation) : 자바 어노테이션 개념과 예제 (0) | 2021.09.14 |
6-2. 패키지 : 자바 패키지의 개념과 예제 (0) | 2021.09.14 |
5. 자바 참조 타입 : 데이터 타입과 메모리 (0) | 2021.09.14 |