디자인패턴이란?
- 소프트웨어 공학에서 프로그램 개발 시 자주 만나게되는 문제 상황에 대한 일반적이고 재사용 가능한 추상화된 해결책이다.(문제 해결을 위해 Best Practice화 했다고 정의할 수도 있다.)
- 소프트웨어 공학적으로 패러다임 & 알고리즘과는 다르다.
- 다수의 구체적인 상황이나 알고리즘이 아닌, 일반화된 해결책이다.
[1] 싱글턴 패턴
어떤 클래스의 인스턴스는 오직 하나임을 보장하며, 이 인스턴스에 접근할 수 있는 전역적인 접촉점을 제공하는 패턴
하나의 인스턴스를 메모리에 등록하여 여러 쓰레드가 동시에 해당 인스턴스를 공유하여 사용하게끔 합니다.
인스턴스를 여러개 만들게 되면 자원을 낭비하게 되거나 버그를 발생시킬 수 있는 것을 방지할 수 있다.
(1) SingletonClass.java
public class SingletonClass {
private static SingletonClass SINGLETON_CLASS_INSTANCE = new SingletonClass();
public int i = 10;
private SingletonClass() {}
public static SingletonClass getSingletonClass() {
if(SINGLETON_CLASS_INSTANCE == null) {
SINGLETON_CLASS_INSTANCE = new SingletonClass();
}
return SINGLETON_CLASS_INSTANCE;
}
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
}
위 처럼 싱글턴 클래스를 구현하여 i의 초기값은 10으로 세팅하고 간단한 getter/setter를 만들어주었다.
(2) FirstClass.java / SecondClass.java
public class FirstClass {
public FirstClass() {
SingletonClass singletonClass = SingletonClass.getSingletonClass();
System.out.println("FirstClass");
System.out.println("i= "+singletonClass.getI());
singletonClass.setI(200);
System.out.println("i= "+singletonClass.getI());
}
}
public class SecondClass {
public SecondClass() {
SingletonClass singletonClass = SingletonClass.getSingletonClass();
System.out.println("SecondClass");
System.out.println("i= "+singletonClass.getI());
}
}
싱글턴 클래스의 getSingletonClass() 메소드로 불러 하나의 인스턴스를 등록하여 출력하고 200으로 set하여 테스트합니다.
(3) MainClass
public class MainClass {
public static void main(String[] args) {
FirstClass firstClass = new FirstClass();
SecondClass secondClass = new SecondClass();
}
}
메인 클래스 실행 결과 아래와 같이 초기에는 10이 나오지만 FirstClass에서 200으로 설정했고 싱글턴은 하나의 인스턴스만을 만들기 때문에 SecondClass에서도 설정된 200이 출력되는 것을 볼 수 있습니다.
728x90
반응형