싱글턴 패턴(Singleton Pattern) 이란?
: 하나의 클래스에서 단 하나의 인스턴스만 생성되도록 보장하는 디자인 패턴
주요 특징 :
단일 인스턴스 보장 : 클래스의 인스턴스가 하나만 존재하도록 제한
전역 접근 제공 : 애플리케이션의 어디에서나 동일한 인스턴스를 사용할 수 있다.
Lazy Initialization : 인스턴스가 필요할 때 처음으로 생성되며, 이후에는 동일한 인스턴스를 반환(즉, 계속해서 객체를 생성하지 않는다.)
싱글턴 패턴 구현 방식 :
Private Constructor : 외부에서 인스턴스를 생성하지 못하도록 생성자를 private으로 선언
Static Instance : 클래스의 유일한 인스턴스를 static으로 선언하여 관리
Static Method : 인스턴스를 반환하는 메서드를 static으로 제공
싱글턴 패턴 활용 예
public class Singleton {
// 싱글턴은 static을 붙여줘야함
private static Singleton single = null;
private Singleton() {
}
public static Singleton getInstance(){
if(single == null){
single = new Singleton(); // 1번만 실행
}
return single;
}
}
private static Singleton single = null :
: Singleton 클래스의 단일 인스턴스를 저장하기 위한 정적 변수
private Singleton() :
: 외부에서 인스턴스를 생성하지 못하도록 생성자를 private으로 선언
public static Singleton getInstance() :
: 싱글턴 인스턴스를 반환하는 정적 메서드
: 내부에서 인스턴스가 null일 경우에만 생성하며, 이미 생성된 경우 기존 인스턴스를 반환
public class MainClass {
public static void main(String[] args) {
Singleton sc = Singleton.getInstance();
System.out.println(sc);
sc = Singleton.getInstance();
System.out.println(sc);
// 이렇게해도 1번만 실행됨. 이미 객체가 생성되었기 때문에 if문은 안돌고 리턴만 계속 된다.
}
}
: 결과처럼 동일한 주소값이 나온다.
싱글턴을 화용한 외부 클래스 값 출력 방법
public class MyClass {
public void function(){
Singleton sc = Singleton.getInstance();
sc.number = 123;
}
}
Singleton sr = Singleton.getInstance() : 해당 코드를 통해서 싱글턴 객체를 생성한다.
public class HeClass {
public void func(){
Singleton sr = Singleton.getInstance();
sr.number = 332;
}
}
public class YouClass {
public void function(){
Singleton sc = Singleton.getInstance();
int number = sc.number;
System.out.println("number : " + number);
}
public void func(){
Singleton sr = Singleton.getInstance();
int number = sr.number;
System.out.println("number : " + number);
}
}
public class MainClass {
public static void main(String[] args) {
MyClass my = new MyClass();
my.function();
YouClass you = new YouClass();
you.function();
HeClass he = new HeClass();
he.func();
YouClass youu = new YouClass();
youu.func();
}
}
: MyClass에서 값을 넣고 함수로 연결된 YouClass에 값을 전달
: HeClass에서 값을 넣고 함수로 연결된 YouClass에 값을 전달
'Java > [OOP] Design Pattern' 카테고리의 다른 글
Java) Factory Pattern : 유연한 객체 생성 예제 (0) | 2025.01.15 |
---|