
1. 패턴(디자인 패턴)이란?
객체지향 언어의 장점을 모아 가장 효율적으로 개발을 할 수 있게, 유지보수를 효율적으로 할 수 있게 만들어놓은 프레임을 말한다.
2. 싱글톤 패턴(Singleton Pattern)이란?
싱글톤이란 어떤 클래스가 최초 한번만 메모리를 할당하고(static) 그 메모리에 객체를 만들어 사용하는 디자인 패턴을 의미한다. 싱글턴 패턴을 따르는 클래스는, 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고, 이 객체에 접근할 수 있는 전역적인 접촉점을 제공하는 패턴이다.
# 싱글톤 예제
public class SingletonClass {
private static SingletonClass SINGLETON_INSTANCE;
private int i;
private SingletonClass(){i = 10;} //생성자함수가 private이므로 외부에서는 new를 이용해서
// 생성못하고, 이 클래스 내부에서만 생성자함수 호출할 수 있다.
public static SingletonClass getSingletonClass(){
// 객체가 생성되기 전에 데이터영역의 클래스 상태에서 바로 접근가능한 메소드
if(SINGLETON_INSTANCE==null)
SINGLETON_INSTANCE = new SingletonClass();//객체생성을 이곳에서만 한다
return SINGLETON_INSTANCE;
}
public int getI() {return i;}
public void setI(int i) {this.i = i;}
}
public class FirstClass {
public FirstClass(){
SingletonClass singletonObject = SingletonClass.getSingletonClass();
System.out.println("FirstClass 객체 ");
System.out.println(singletonObject.getI());
singletonObject.setI(999);
System.out.println("i = "+singletonObject.getI());
}
}
public class SecondClass {
public SecondClass() {
SingletonClass singletonObject = SingletonClass.getSingletonClass();
System.out.println("SecondClass 객체 ");
System.out.println(singletonObject.getI());
}
}
public class MainClass {
public static void main(String[] args) {
FirstClass firstObj = new FirstClass();
SecondClass secondObj = new SecondClass();
SingletonClass singObj = SingletonClass.getSingletonClass();
System.out.println("main()메소드에서 singleton객체");
System.out.println(singObj.getI());
}
}
public class SingletonClass {
private static SingletonClass SINGLETON_INSTANCE;
private int i;
private SingletonClass(){i = 10;} //생성자함수가 private이므로 외부에서는 new를 이용해서
// 생성못하고, 이 클래스 내부에서만 생성자함수 호출할 수 있다.
public static SingletonClass getSingletonClass(){
// 객체가 생성되기 전에 데이터영역의 클래스 상태에서 바로 접근가능한 메소드
if(SINGLETON_INSTANCE==null)
SINGLETON_INSTANCE = new SingletonClass();//객체생성을 이곳에서만 한다
return SINGLETON_INSTANCE;
}
public int getI() {return i;}
public void setI(int i) {this.i = i;}
}
public class FirstClass {
public FirstClass(){
SingletonClass singletonObject = SingletonClass.getSingletonClass();
System.out.println("FirstClass 객체 ");
System.out.println(singletonObject.getI());
singletonObject.setI(999);
System.out.println("i = "+singletonObject.getI());
}
}
public class SecondClass {
public SecondClass() {
SingletonClass singletonObject = SingletonClass.getSingletonClass();
System.out.println("SecondClass 객체 ");
System.out.println(singletonObject.getI());
}
}
public class MainClass {
public static void main(String[] args) {
FirstClass firstObj = new FirstClass();
SecondClass secondObj = new SecondClass();
SingletonClass singObj = SingletonClass.getSingletonClass();
System.out.println("main()메소드에서 singleton객체");
System.out.println(singObj.getI());
}
}
'Archive > Java' 카테고리의 다른 글
| [자바] 예외(Exception) 처리 (0) | 2021.05.26 |
|---|---|
| [자바] API(Application Programming Interface) (0) | 2021.05.26 |
| [자바] 인터페이스 interface (0) | 2021.05.21 |
| [자바] 추상 클래스 abstract class (0) | 2021.05.21 |
| [자바] 상속 inheritance (0) | 2021.05.21 |