본문 바로가기

Design Patterns

Singleton Pattern

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
싱글턴 패턴에 대해서는 배워본적이 있습니다. Agile Java 책에도 간간히 다루고 있습니다.. 워낙 순서 없이 가는 책인지라.. 이것저것 들어본건 많아서 좋긴하네요. 일간 이름이 생소하지 않으니까 막연한 두려움이 없는거 같아요.

일단 싱글턴 패턴에 대해서는 간단하게 정의하자면

해당 클래스의 인스턴스가 하나만 만들어지고, 어디서든지 그 인스턴스에 접근할 수 있도록 하기 위한 패턴


이라고 정의가 되어있습니다. 이 전의 어느 패턴보다도 말을 들었을때 이해가 쉬운 패턴이네요. 다시 말하면 한개의 객체만이 필요한 경우에 사용하는 패턴이라고 볼 수 있겠습니다. 두개의 이상의 객체가 생기면 안되는 경우에 싱글턴 패턴을 사용하면 좋겠지요.

일단은 여러개의 객체가 만들어지지 않을려면?? new 연산자를 사용하여 객체를 만들수 있게 하면 안되겠지요.. 따라서 생성자가 public이 아니라 private로 선언이 되야 합니다. 음.. 설명보다는 소스코드가 눈에 잘 들어오기때문에 소스코드를 한번 만들어보았습니다 ^^

public class Singleton {

      private static Singleton object;

      private Singleton() {

      }

      public static Singleton getInstance() {

            if (object == null)

                   object = new Singleton();

            return object;

      }

      public void sayHello() {

            System.out.println("안녕하세여???");

      }

}


예제가 굉장히 간단합니다. 그럼 sayHello() 메소드를 호출하기 위해서는 어떻게 해야 될까요???? 일단 생성자를 private으로 만들어놓았기 때문에 다른 클래스에서는 new 연산자를 사용할 수가 없습니다. 그래서 getInstance()라는 객체를 반환하는 정적 메소드를 사용하여 호출할 수 있습니다.

public class SingletonDemo {

      public static void main(String[] args) {

            Singleton.getInstance().sayHello();

      }

}


이렇게 간단하게 객체를 만드는 것 없이 가능합니다 ^^ 생각보다 간단한 패턴입니다만, 필수 요소들이 있습니다.

일단 static으로 선언된 인스턴스 변수와 마찬가지로 static으로 선언된 getInstance라는 객체 생성 메소드 이렇게 두가지의 필수적인 요소들이 있습니다 ^^