아.. 다 써놨는데 날렸다.
전체 프로그램에서 단 하나의 객체만 만들도록 보장해야 하는 경우.
단 하나만 생성하는 객체를 싱글톤이라고 한다.
유일한 객체 사용을 위해 하나의 인스턴스만 생성하도록 함.
1. 외부에서 인스턴스 생성을 하지 못하게 차단 (=private)
2. 클래스 내에서 직접 인스턴스 생성해 외부에 리턴 (=getInstance())
3. 해당 클래스는 누구나 생성된 인스턴스를 전달받아 사용해야함 (=기존의 인스턴스 공유)
단 하나의 객체를 만들기 위해서
클래스 외부에서 new 생성자로 호출할 수 없도록(인스턴스 생성할 수 없도록) 막기 위해서
접근 제한자 private를 붙혀준다.
그리고 static 변수를 하나 선언하고 자신의 객체를 생성해 초기화한다. (이 경우는 생성자 호출 가능)
이 static 변수도 private 를 붙여서 외부에서 변경하지 못하도록 막는다.
대신 외부에서 호출할 수 있도록 getInstance() 를 선언해 자신의 객체를 리턴할 수 있도록 함.
class Example{
//정적 필드
private static Example singleton = new Example();
//생성자
private Example(){}
//정적 메소드
static Example getInstance(){
return singleton;
}
}
=>
1. 외부에서 인스턴스 생성 불가하도록 생성자에 private 선언
2. 자신의 클래스 내에서 직접 인스턴스 생성해 멤버변수에 저장
=> 외부에서 인스턴스 생성 없이 접근해야하므로 static (즉, static 멤버변수로 선언해 클래스명만으로 접근 가능하도록)
=> 외부에서 함부로 접근 못하게 private 붙임
3. private 접근제한자가 붙은 멤버변수(생성된 인스턴스 주소값)를 외부로 리턴할 Getter 메서드 정의
=> 인스턴스 생성 없이 호출 가능해야 하므로 static 메서드로 정의한다.
4. 리턴받은 인스턴스를 통해 멤버변수 또는 메서드 접근 가능
SingletonClass sc = SingletonClass.getInstance();
sc.print();
'develop > Java' 카테고리의 다른 글
접근 제한자(Access Modifier) (0) | 2021.03.01 |
---|---|
상속(Inheritance) (0) | 2021.03.01 |
static 메서드 (0) | 2021.02.23 |
static (0) | 2021.02.23 |
코드의 재사용 (0) | 2021.02.18 |