본문 바로가기

Java

정적 멤버와 static, singleton 패턴

10. 정적 멤버와 static
- 정적 멤버는 클래스에 고정된, 클래스에 소속된 멤버로서 객체를 생성하지 않고 사용할 수 있는 필드와 메소드를 말한다. 

10.1 정적 멤버 선언
- 필드, 메소드 선언시 static 키워드 추가
- 정적 필드: 객체마다 가지고 있을 필요성이 없는 공용적인 데이터라면 정적 필드로 선언하는 것이 좋다.
- 정적 메소드: 인스턴스 필드를 이용하지 않는다면 정적 메소드로 선언하는 것이 좋다. 

10.2 정적 멤버 사용
- 클래스가 메모리에 로딩되면 바로 사용할 수 있다.
- 클래스 이름과 함께 도트 연산자로 접근한다. 

10.3 정적 초기화 블록
- 정적 필드는 선언과 동시에 초기값을 주는 것이 보통이다. 
- 정적 필드의 복잡한 초기화 작업을 위해서 정적 블록을 제공한다. 

10.4 정적 메소드와 블록 선언 시 주의할 점 
- 인스턴스 필드나 인스턴스 메소드를 사용할 수 없다. 
- 자신의 참조인 this 키워드도 사용이 불가능하다. 

10.5 싱글톤 Singleton
- 싱글톤: 전체 프로그램에서 단 하나의 객체만 만들도록 보장해야 하는 경우

- 싱글톤 코드 
public class 클래스 {
    //정적 필드(객체마다 가지고 있을 필요가 없는 공용 데이터) - 자신의 타입인 정적 필드를 선언하고 자신의 객체를 생성해 초기화 
    private static 클래스 singleton = new 클래스();

    //생성자 - 외부에서 다른 인스턴스를 생성할 수 없도록 private
    private 클래스 () {}

    //정적 메소드 - 외부에서 호출할 수 있도록 정적 필드를 참조하고 있는 자신의 객체를 리턴
    static 클래스 getInstance () {
            return singleton;
    }
    }

- getInstance () 는 하나의 객체만 리턴하기 때문에 아래 코드에서는 동일한 객체를 참조한다.
    클래스 변수1 = 클래스.getInstance ();
    클래스 변수2 = 클래스.getInstance ();