패턴(디자인 패턴)이란, 객체지향 언어를 배우는데 가장 중요한 방법이라고 생각 되는 것이다. 객체지향이 세상에 등장한 이후로 훌륭한 선배 개발자들은 어떻게 하면 더욱 빠르게 개발하고, 유지 보수 측면에서도 효율적으로 개발을 할 수 있을까에 대한 고민을 많이 해왔다. 이러한 고민을 하던 중 객체지향 언어의 상속, 인터페이스, 추상화 등의 기능을 이용해서 시간과 인력 투입의 효율을 극대화 하기 위한 방식이 정립되기 시작 했다. 그리고 이러한 방식을 어떠한 틀로 정해 놓은 것이 바로 디자인 패턴 이다. 쉽게 정리하면, 선배님들이 객체지향 언어의 장점들을 모아 가장 효율적으로 개발을 할 수 있게 만들어 놓은 틀이다.
싱글턴 패턴(Singleton pattern)이란 어떤 클래스의 인스턴스는 오직 하나임을 보장하며, 이 인스턴스에 접근할 수 있는 전역적인 접촉점을 제공하는 패턴이다.
예제를 통해 알아보자.
SingletonClass.java
package com.javalec.singletonex;
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;
}
}
먼저 싱글턴 클래스를 만들어주고 private으로 생성자를 하나 만들어준다. 그리고 if문을 이용해서 전달될 인스턴스가 null값이면 값을 넘겨주는 것이다. 즉 한번 생성하고 어디서든 접근하게 만드는 것이다. 그러기 위해 게터와 세터가 존재한다.
FirstClass.java
package com.javalec.singletonex;
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());
}
}
FirtsClass에서 싱글턴 객체를 가져와 처음 값을 출력하면 10이 출력된다. 하지만 setI를 이용해서 200으로 설정해준 뒤 출력해보면 200이 출력된다.
SecondClass.java
package com.javalec.singletonex;
public class SecondClass {
public SecondClass() {
SingletonClass singletonClass = SingletonClass.getSingletonClass();
System.out.println("SecondClass");
System.out.println("i = " + singletonClass.getI());
}
}
두번째 클래스역시 객체를 생성하고 싱글턴 객체의 게터를 통해 값을 가져온다. 과연 어떤 값이 출력될까?
MainClass.java
package com.javalec.singletonex;
public class MainClass {
public static void main(String[] args) {
FirstClass firstClass = new FirstClass();
SecondClass secondClass = new SecondClass();
}
}
각각 객체를 생성해준다.
출력
FirstClass
i = 10
i = 200
SecondClass
i = 200
처음 FirstClass에서 200으로 설정해주었기 때문에 똑같이 SecondClass에서도 200이 출력되는 것을 알 수 있다. 즉, 값을 setI으로 설정해주면 어떤 클래스에서 접근하던 설정한 값을 넘겨주는 것이다.
간단하게 싱글턴패턴에 대하여 알아보았는데, 이런 패턴들은 참 다양하게 사용되고 유용한 것 같다.