어떤 클래스가 최초 한번 메모리를 할당하고 해당 메모리에 여러 레퍼런스를 생성하여 사용하는 디자인 패턴
static을 사용하여 인스턴스 생성
싱글톤 패턴을 사용하지 않는 경우
// Dog.java
public class Dog {
private String name;
public Dog(String name) {
this.name = name;
}
public void bark() {
System.out.println(name + ": " + "멍!");
}
}
// Main.java
public class Main {
public static void main(String[] args) {
Dog dog1 = new Dog("dog1");
Dog dog2 = new Dog("dog2");
dog1.bark();
dog2.bark();
if (dog1.equals(dog2)) {
System.out.println("dog1 & dog2 => 같습니다.");
} else {
System.out.println("dog1 & dog2 => 다릅니다.");
}
}
}
실행 결과
dog1: 멍!
dog2: 멍!
dog1 & dog2 => 다릅니다.
싱글톤 패턴을 사용하는 경우
// SingleDog.java
public class SingleDog {
private static final SingleDog instance = new SingleDog("singleDog");
private static String name;
private SingleDog(String name) {
this.name = name;
}
public static SingleDog getInstance() {
return instance;
}
public void changeName(String name) {
this.name = name;
}
public void bark() {
System.out.println(name + ": " + "멍!");
}
}
// Main.java
public class Main {
public static void main(String[] args) {
SingleDog singleDog1 = SingleDog.getInstance();
SingleDog singleDog2 = SingleDog.getInstance();
singleDog1.changeName("singleDog1");
singleDog2.changeName("singleDog2");
singleDog1.bark();
singleDog2.bark();
if (singleDog1.equals(singleDog2)) {
System.out.println("singleDog1 & singleDog2 => 같습니다.");
} else {
System.out.println("singleDog1 & singleDog2 => 다릅니다.");
}
}
}
실행 결과
singleDog2: 멍!
singleDog2: 멍!
singleDog1 & singleDog2 => 같습니다.
모든 소스코드는 여기에서 확인할 수 있다.
public class Singleton {
private static final Singleton instance = new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return instance;
}
}
public class Singleton {
private static Singleton instance;
private Singleton(){}
public static Singleton getInstance(){
if(instance == null){
instance = new Singleton();
}
return instance;
}
}
public class Singleton {
private Singleton(){}
private static class SingletonHelper{
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance(){
return SingletonHelper.INSTANCE;
}
}