반응형
- 싱글톤 만드는 방법
라이브러리 클래스를 하나 만들어준다. (main 메서드 없는 클래스)
1. 외부에서 new 연산자로 생성자를 호출 못하게 막는다. (private 접근 제한자를 생성자 앞에 붙임)
public class Singleton {
private static Singleton singleton = new Singleton();
}
2. 클래스 자신의 타입으로 정적 필드 선언하고, 자신의 객체를 생성하고 초기화한다.
(private 를 붙여 외부에서 필드 값 변경 못하게 함.)
public class Singleton {
private static Singleton singleton = new Singleton();
private Singleton() {
}
}
3. 외부에서 호출 가능하게 하는 정적 메소드 getInstance() 를 선언
public class Singleton {
private static Singleton singleton = new Singleton();
private Singleton() {
}
static Singleton getInstance() {
return singleton;
}
}
return 타입으로 자신(Singleton) 을 넣어준다.
즉 필드가 참조하는 객체를 리턴한다.
- 싱글톤 얻는 방법
실행 클래스를 만든다 ( main 메소드 추가)
1. 우선은 에러가 나는 방식
public class SingletonExample {
public static void main(String[] args) {
// 이 방식으론 접근 불가
Singleton obj1 = new Singleton();
}
외부에서 new 연산자로 생성자를 호출하면 컴파일 에러가 난다.
이유는, 생성자 앞에 private가 있기때문에 접근이 불가해서다.
2. 제대로 된 접근 방식
public class SingletonExample {
public static void main(String[] args) {
Singleton obj1 = Singleton.getInstance();
Singleton obj2 = Singleton.getInstance();
if(obj1 == obj2) {
System.out.println("같은 singleton 객체다.");
} else {
System.out.println("같은 singleton 객체가 아니다.");
}
}
}
new가 아닌 Singleton 클래스로 접근을 한다.
if문으로 obj1 과 obj2 가 참조하는 객체가 같은지 확인해본다.
ctrl + f11 을 눌러서 java application 을 실행해보자.
obj1과 obj2는 같은 객체를 참조하는것을 알 수 있다.
반응형
'study > JAVA' 카테고리의 다른 글
어노테이션(Annotation) (0) | 2022.02.22 |
---|---|
Getter와 Setter (0) | 2022.02.18 |
접근 제한자( Access Modifier) (0) | 2022.02.18 |
상수(static final) (0) | 2022.02.14 |
final 필드 (0) | 2022.02.14 |
댓글