📝 싱글톤 (SingleTon)
- JAVA에서 많이 사용되는 디자인 패턴
- 어떤 클래스가 최초 한번만 메모리를 할당하고(Static) 그 메모리에
객체를 만들어 사용하는 디자인 패턴- 즉 생성자의 호출이 반복적으로 이뤄져도 실제로 생성되는 객체는 최초 생성된
객체를 반환 해주는 것이다.
메모리를 효율적으로 사용할 수 있다.
다른 클래스 간에 데이터 공유가 쉽다
// 싱글톤 예시
public class Calc{
static Calc current;
}
public class Calc{
private static Calc current;
}
public class Calc{
private static Calc current;
// 생성자를 private
private Calc() {}
}
public class Calc{
private static Calc current;
private Calc() {}
// 객체 할당 처리
// 객체가 할당되지 않은 경우에만 할당하도록 하여 중복 할당을 방지한다.
public static Calc getInstance() {
if(current == null) {
current = new Calc();
}
return current;
}
// 객체에 null을 대입하면 메모리에서 삭제된다.
public static void freeInstance() {
current = null;
}
}
public class Calc {
// ------------------------ 싱글톤 객체 생성을 위한 준비 시작 ----------------------
private static Calc current;
private Calc() {}
public static Calc getInstance() {
if(current == null) {
current = new Calc();
}
return current;
}
public static void freeInstance() {
current = null;
}
// ------------------------ 싱글톤 객체 생성을 위한 준비 끝 ----------------------
// 이 클래스가 구현해야 하는 기능
public void plus(int x, int y) {
int z = x + y;
System.out.println(x + " + " + y + " = " + z);
}
public void minus(int x, int y) {
int z = x - y;
System.out.println(x + " - " + y + " = " + z);
}
}
public class Main {
public static void main(String[] args) {
// 별도의 객체에 참조시키는 경우
Calc loader1 = Calc.getInstance();
loader1.plus(10, 20);
// 참조처리를 생략하고 직접 사용하는 경우
Calc.getInstance().minus(100, 50);
Calc.getInstance().plus(100, 50);
}
}
👉 실행 결과
10 + 20 = 30
100 - 50 = 50
100 + 50 = 150
싱글톤은 getInstance() 메서드를 사용하여 객체를 리턴 받는 형식으로 사용한다.
여러개의 객체를 리턴 받더라도 모두 하나의 static 객체를 참조하게 되기 때문에
전역 객체 하나만이 메모리에 할당되게 된다.