1. 싱글톤
- 자바의 디자인 패턴
- 하나의 애플리케이션 내에서 단 하나만 생성되는 객체
외부에서 new연산자로 인스턴스 생성할 수 없도록 private 접근 제어자를 붙임
2. 예제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
package sec07_exam;
public class Singleton {
//접근제어자 범위가 가장 좁은 범위의 제어자이기 때문에 외부에서 접근을 못한다.
private static Singleton singleton = new Singleton();
//싱글톤 패턴은 그 핵심이 하나의 인스턴스를 공유하는 것이다.
//하여, 생성자에 private를 통해서 외부에서 싱글톤 객체의 생성을 막는다.
private Singleton() {
System.out.println("생성자 호출");
}
//getInstance()하는 역할?
//공유변수의 주소만 리턴해주므로써 싱글톤 객체를 사용하게끔 해준다.
public static Singleton getInstance() {
return singleton;
}
}
|
cs |
싱글톤은 자신을 정적 필드로 선언하고 객체 생성해줍니다.
그리고 외부에서 접근 못하도록 private를 붙여줍니다.
그리고 외부에서 호출할 수 있도록 public메서드인 getInstance를 만들어줍니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
package sec07_exam;
import java.util.Calendar;
public class SingletonEx {
public static void main(String[] args) {
//Singleton클래스의 기본생성자를 private로 설정했기 때문에
//기본 생성자 호출이 안된다.
//Singleton s1 = new Singleton();
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
//Calendar 클래스는 싱글톤 패턴이아니다. 그냥 흉내를 낸 것이다.
Calendar calendar1 = Calendar.getInstance();
Calendar calendar2 = Calendar.getInstance();
if (s1==s2) {
System.out.println("같은 주소를 가지는 싱글톤 객체입니다!");
System.out.println("s1의 주소 : " + s1);
System.out.println("s2의 주소 : " + s2);
}
else {
System.out.println("다른 주소를 가지는 싱글톤 객체입니다!");
System.out.println("s1의 주소 : " + s1);
System.out.println("s2의 주소 : " + s2);
}
if (calendar1==calendar2) {
System.out.println("같은 주소를 가지는 싱글톤 객체입니다!");
System.out.println("calendar1의 주소 : " + calendar1);
System.out.println("calendar2의 주소 : " + calendar2);
}
else {
System.out.println("다른 주소를 가지는 싱글톤 객체입니다!");
System.out.println("calendar1의 주소 : " + calendar1);
System.out.println("calendar2의 주소 : " + calendar2);
}
}
}
|
cs |
싱글톤 객체를 사용하려면 getInstance메서드를 사용해야합니다.
이 객체는 하나이고 getInstance로 그 객체의 주소를 참조하고 있으므로
싱글톤타입 객체는 모두 같은 주소를 가집니다.
예시로 Calendar도 만들어봤는데.
싱글톤 패턴은 아니지만 getInstance를 쓴다는 점에서 비슷합니다.
<출력결과>
728x90
'JAVA > java 이론' 카테고리의 다른 글
[자바JAVA]다형성/ 업캐스팅, 다운캐스팅/instanceof연산자/ 형변환 (0) | 2020.10.22 |
---|---|
[자바JAVA]제어자 modifier / 접근 제어자/ 제어자의 조합 (0) | 2020.10.21 |
[자바JAVA] 메서드 오버라이딩 (0) | 2020.10.19 |
[자바JAVA]상속/포함관계 (0) | 2020.10.18 |
[자바JAVA] 생성자 constructor / this()/ 생성자를 이용한 인스턴스 복사 (0) | 2020.10.11 |