ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [객체지향의 원리와 이해] 싱글턴 패턴 (Singleton Pattern)
    개발/OOP, Design Pattern 2021. 1. 2. 16:03

    싱글턴 패턴

    클래스의 인스턴스, 즉 객체를 하나만 만들어 사용하는 패턴

    • 커넥션 풀, 스레드 풀, 디바이스 설정 객체 등과 같은 인스턴스를 여러개 만들면 불필요한 자원을 사용하게 되고, 프로그램에 예상치 못한 결과를 초래하기도 한다.
    • 그래서 이런 경우 하나의 인스턴스만을 만들고 계속 재사용하는 싱글턴 패턴을 사용한다.

    중요 포인트
    new를 실행할 수 없도록 생성자에 private 접근제한자를 지정한다.
    유일한 단일 객체를 반환할 수 있는 정적 메소드가 필요하다.
    유일한 단일 객체를 참조할 수 있는 정적 참조 변수가 필요하다.

    예제

    public class Singleton {
        static Singleton singletonObject; // 정적 참조 변수
    
        private Singleton() {} // private 접근제한자
    
        static public Singleton getInstance() { // 정적 메소드
            if (singletonObject == null) {
                singletonObject = new Singleton();
            }
    
            return singletonObject;
        }
    }
    • 정적 메소드 getInstance()를 호출하면 정적 참조변수를 반환하도록 되어있다. (null 이면 생성후 반환)
    public class Client {
        public static void main(String[] args) {
            // private 생성자이므로 new를 통해 인스턴스를 생성할 수 없다.
            // Singleton singleton = new Singleton();
    
            Singleton s1 = Singleton.getInstance();
            Singleton s2 = Singleton.getInstance();
            Singleton s3 = Singleton.getInstance();
    
            System.out.println(s1);
            System.out.println(s2);
            System.out.println(s3);
    
            s1 = null;
            s2 = null;
            s3 = null;
        }
    }
    • 위는 싱글턴 패턴을 사용하는 메인 메소드를 보여준다.
    • 주석 처리된 // Singleton singleton = new Singleton();의 주석을 풀면 에러메세지가 나타난다.
      • Singleton 클래스의 생성자가 private이기 때문에 외부에서 생성할 수 없기 때문이다.
    • System.out.println()으로 객체를 출력하면 객체의 toString() 메서드가 호출된다.
      • 별도로 오버라이딩 하지 않았다면, 객체의 고유 값인 hashcode를 반환한다.
    • 동일한 객체를 호출하고 있기 때문에 동일한 hashcode를 출력한다.

    댓글

Designed by Tistory.