본문 바로가기
🥝CS

[ComputerScience]디자인패턴 // 싱글톤패턴

by 김말자 2022. 8. 10.
728x90
728x90
BIG

디자인패턴

소프트웨어 설계시 발생했던 문제점을 객체 간 상호관계 등등 이용해서 해결할 수 있도록 하나의 규약으로 만들어 놓은것.설계시 서로 간의 공통되는 설계문제가 존재하는데 이를 처리하는 해결책도 공통점이 있어서 그걸 패턴으로 묶음. 주로 객체지향프로그래밍 설계시 자주 나타남

 

싱글톤패턴(singleton pattern)

  • 하나의 클래스에는 오직 하나의 인스턴스만 가지는 패턴
  • DB연결모듈에 많이 사용 
  • 의존성이 높아지고, 비용이 줄어듬

*인스턴스는 일반적으로 실행중인 프로세스, 클래스의 현재 생성된 오브젝트를 말함

자바

class Singleton {

    static final Singleton instance = new Singleton(); //final을 써서 상수로 못바꾸게 만들어야됨

    private Singleton() { //접근제한 싱글톤의 특징임
        //초기화
    }

    public Singleton getInstance() {
        return instance;
    }

}

사전 초기화방법과 사후 초기화 방법이 있는데, 클래스 로딩시 인스턴스를 생성하는 방법과, 인스턴스를 실제로 사용할 시점에 인스턴스를 생성하는 방법이 있다.

자바스크립트

리터럴또는 새로운 오브젝트로 객체를 생성시 다른 어떤 객체와도 같지않아 싱글톤패턴구현가능

const obj = {
    a: 566565
}
const obj2 = {
    a: 566565
}
console.log(obj === obj2)
// false

obj와 obj2는 같은 값을 가지고 있지만 다른 인스턴스를 가짐

데이터베이스연결모듈

const URL = 'mongodb://localhost:8080' 
const createConnection = url => ({"url" : url})    
class DB {
    constructor(url) {
        if (!DB.instance) { 
            DB.instance = createConnection(url)
        }
        return DB.instance
    }
    connect() {
        return this.instance
    }
}
const a = new DB(URL)
const b = new DB(URL) 
console.log(a === b) // true

DB.instance라는 인스턴스로 a,b를 생성

 

싱글톤 패턴의 단점

  • Test Driven Development를 할 때 걸림돌이 됨
  • 싱글톤 패턴은 미리 생성된 하나의 인스턴스를 기반으로 구현하는 패턴이라 독립적인 인스턴스를 만들기 힘듬
  • 의존성주입(DI)를 통해 결합을 느슨하게 만들 수 있음

코코도르 디퓨저 200ml x 2p, 에이프릴 프레쉬Apple 2022 맥북 에어, 스타라이트, M2 8코어, GPU 8코어, 256GB, 8GB, 30W, 영문라온 LG그램 맥북 노트북 슬리브파우치, 오트밀카키노트북파우치 맥북가방 13인치 15인치 17인치퍼니메이드 캔버스 노트북 파우치 + 가죽 마우스패드, 인디블루(파우치)로마네 브런치브라더 바게트베어 EVA 하드 노트북 파우치 13형끼움 맥북 노트북 슬림 가죽 슬리브 포트폴리오 파우치, 스카이블루

 

의존성주입

메인모듈이 있고 DI(의존성주입)을 해서 간접적으로 의존성을 주입하는 방식임(디커플링)

모듈들을 쉽게 교체할 수 있는 구조가 되서 테스팅하기 쉽다.

다만, 클래스 수가 늘어나서 복잡성이 증가 될 수 있음

의존성 중비은 상위모듈은 하위모듈에서 어떤것도 가져오지 않는걸 기반으로 만들어야되며 둘다 추상적이어야 함

 

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

728x90
반응형
BIG

댓글