[CS]:: Design pattern - 싱글톤패턴 singletone pattern

김종건·2023년 5월 9일

CS 디자인 패턴

목록 보기
1/8
post-thumbnail

❔디자인 패턴

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

  • 개발자들 사이에서 조금씩 쌓인 공통된 노하우라고도 봄
  • 어느정도 검증된 개발방법

⭐코드를 재사용하기 쉽게 한 일종의 템플릿처럼 규약을 정리해서 만든 것!

어떤 상황에 어떤 패턴을 사용했는지, 개발자들간에서도 자주 이용하는 개념


🎯싱글톤 패턴

하나의 인스턴스에서 리소스를 관리하고 어플리케이션 내에서 전역적으로 접근할 수 있도록 도와주는 패턴

singleton 객체{
	constructor(){
		instance{}
				}
			}
  • 싱글톤은 1:다수의 형태를 하고있기 때문에 클라이언트가 많아지더라도 항상 같은 인스턴스 개체를 사용하게 된다.
  • 데이터베이스 연결에 관한 인스턴스 생성 비용에 효율적이다

    constructor() 프라이빗 함수

    new로 가져올 때 컨스트럭터에 대한 직접적인 접근을 방지하는 함수

    getInstance()

    클라이언트는 직접적으로 컨스트럭터에 접근할 수 없기때문에 가져올때 getInstance 스태틱 메소드를 사용해서 싱글톤 클래스에 접근해야한다

    ✔예시

    class Singleton{
    	constructor(){
    		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
      
      //Singleton.instance 라는 하나의 인스턴스를 가지는 Singleton 클래스
     //이를 통해 a,b는 하나의 인스턴스를 갖는다
    

    ✔장점

  • 코드 관리 효율성과 생산성
  • 하나의 인스턴스에서 리소스를 관리할 수 있다
  • getInstance를 통해서 앱 전역에서 싱글톤 클래스에 접근 할 수 있다.

    ✔단점

    TDD(Test Driven Development)를 할때 걸림돌이 된다
    주로 단위 테스트를 할때 테스트는 서로 독립적이어야하는데 싱글톤 패턴은 미리 생성된 하나의 인스턴스를 기반으로 구현하는 패턴이므로 각 테스트마다 '독립적인' 인스턴스를 만들기 어렵다.

    의존성이 높아진다는 단점도 있다

    의존성이란 종속성이라고도 하며 A가 B에 의존성이 있다는 것은 B의 변경 사항에 대해 A또한 변해야 된다는 것을 의미

    메인모듈(main module)이 '직접' 하위 모듈에 의존성을 주기보다는 중간에
    의존성 주입자(dependancy injector)끼어 넣어 '간접'적으로 의존성을 주입하는 방식

  • 모듈간의 관계들이 조금 더 명확해진다
  • 런타임의 페널티가 생길수 있음
  • 상위 모듈은 하위 모듈에서 어떠한것도 가져와서는 안된다는 원칙

    참고

    개발자가 알아야할 디자인패턴
    https://github.com/wnghdcjfe/csnote

  • profile
    https://github.com/Foccy https://foccy-github-5er7huis0-foccy.vercel.app/?category=category1

    0개의 댓글