ETC

디자인 패턴 (싱글톤 패턴, 팩토리 패턴)

5_ssssseung 2022. 7. 12. 01:03

디자인 패턴
프로그램을 설계할 때 발생했던 문제점들을 객체 간의 상호 관계 등을 이용하여 해결할 수 있도록 하나의 '규약', 약속 형태로 만들어 놓은 것




싱글톤 패턴

하나의 클래스에 하나의 인스턴스만 가지는 패턴 (예 : DB 연결 모듈)

  • 전역 변수를 사용하지 않고 객체를 하나만 생성함
  • 생성된 객체를 어디서든지 참조할 수 있음
  • 여러번 생성해도, 실제로 생성되는 객체는 하나
    • 최초 생성 이후에 호출된 생성자는 이미 생성된 객체를 리턴
  • 환경설정 클래스, 커넥션 풀과 같이 공통 클래스에 사용하는 것이 일반적

 

싱글톤 패턴의 특징

  • 하나의 인스턴스를 여러 모듈들이 공유하여 사용
    • 인스턴스 생성할 때 드는 메모리 비용이 줄어듦
    • 여러 모듈에서 사용하기 때문에 의존성이 높아짐

 

싱글톤 예제 코드

Javascript

class Singleton {
    consructor() {
        if (!Singleton.instance) {
            Singleton.instance = this
        }
        return Singleton.instance
    }
    getInstance() {
        return this.instance
    }
}

const a = new Singleton()
const b = new Singleton()
console.log(a === b)        // ==> true

ab는 하나의 인스턴스를 갖는 것을 알 수 있음

 

Java

class Singleton {
    private static class singleInstanceHolder {
        private static final Singleton INSTANCE = new Singleton();
    }
    public static synchronized Singleton getInstance() {
        return singleInstanceHolder.INSTANCE;
    }
}

public class HelloWorld {
    public class void main(String[] args) {
        Singleton a = Singleton.getInstance();
        Singleton b = Singleton.getInstance();
        System.out.println(a.hashCode());
        System.out.println(b.hashCode());
        if (a == b) {
            System.out.println(true);
        }
    }
}

/*
705381145
705381145
true
*/

 

ref

1) https://velog.io/@sms8377/Structure-%EC%8B%B1%EA%B8%80%ED%86%A4-%ED%8C%A8%ED%84%B4%EA%B3%BC-%EB%AC%B8%EC%A0%9C%EC%A0%90#%EC%8B%B1%EA%B8%80%ED%86%A4%EC%9D%B4%EB%9E%80

 

[Structure] 싱글톤 패턴과 문제점

싱글톤은 전역 변수를 사용하지 않고 객체를 하나만 생성 하도록 함생성된 객체를 어디에서든지 참조할 수 있도록 하는 패턴생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나최

velog.io

2) 면접을 위한 CS 전공지식 노트 - 주홍철 (길벗)