KoreanFoodie's Study

6-1. 정적 멤버와 static : 정적 메소드, 정적 초기화 블록, 싱글톤 본문

Tutorials/Java

6-1. 정적 멤버와 static : 정적 메소드, 정적 초기화 블록, 싱글톤

GoldGiver 2021. 9. 14. 15:02

정적(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() 메소드를 통해서만 이루어진다.


해당 포스팅은 이것이 자바다 (신용권 저) 를 참고하였습니다

 

Comments