코딜기
[Design Pattern] 싱글톤 패턴 (Singleton Pattern) 본문
반응형
싱글톤 패턴 (Singleton Pattern)이란?
- 단 하나의 인스턴스만 생성하도록 보장하며, 어디서든 그 인스턴스에 접근할 수 있도록 하는 디자인 패턴이다.
- 무분별한 객체의 생성을 막고, 하나의 객체를 여러 번 재활용하여 메모리의 낭비를 막을 수 있는 디자인 패턴입니다.
싱글톤 패턴 구현
- 외부에서 이 클래스의 객체를 생성하지 못하도록 생성자를 단 1개만 선언하고, private 접근 제한을 붙입니다.
- 생성자를 호출할 수 있는 곳은 같은 클래스 내부 뿐이므로 스스로의 객체를 단 1개만 생성합니다.
- 외부에서 이 클래스의 객체를 요구할 시, 2번에서 미리 만들어 놓은 단 하나의 객체의 주소값을 공개된 메서드를 통해 리턴합니다.
public class Singleton {
// 1
private Singleton() {
System.out.println("객체가 생성됨");
}
// 2
// private static으로 선언을 해서 외부에서 접근하지 못하게 막음
private static Singleton s = new Singleton();
// 3
// private static으로 선언을 해서 외부에서 접근하지 못하게 막음
// 사용할거면 새로 만들지 말고, 미리 만들어 놓은 객체를 사용해라.
public static Singleton getInstance() {
return s;
}
// ============================================================
// 싱글톤 객체에서 사용할 메서드
public void method1() {
System.out.println("여러 군데에서");
}
public void method2() {
System.out.println("쓰이는 중요한 메서드");
}
}
- 객체의 주소값을 반환하는 'getInstance()' 메서드를 'static'으로 선언하기 위해, 싱글톤 인스턴스를 저장하는 필드 역시 'static'으로 지정하였습니다.
- 이는 클래스 수준에서 유일한 객체를 유지하기 위해서 입니다.
- 'static' 필드로 선언된 변수는 클래스 자체를 통해 접근할 수 있으므로, 외부에서 이 변수에 직접 접근하여 객체를 변경하거나 새로 생성하는 것을 방지하기 위해 'private' 접근 제한자를 사용하여 접근을 막고 있습니다.
- 'getInstance()' 메서드가 'static'으로 선언된 이유는, 객체를 생성하지 않더라도 클래스 차원에서 유일한 인스턴스를 반환하기 위함입니다.
- 싱글톤 패턴의 핵심은 하나의 객체만 생성되고 이를 전역적으로 접근할 수 있도록 하는 것이기 때문입니다.
- 싱글톤 패턴을 구현했으니 main 메서드에서 호출을 해보겠습니다.
public class Main {
public static void main(String[] args) {
Singleton s = Singleton.getInstance();
s.method1();
s.method2();
}
}
- 이렇게 되면 외부에서는 객체를 생성할 수 없고, 오로지 getInstance() 메서드를 통해서만 객체의 주소값을 받을 수 있습니다.
반응형
Comments