디자인패턴이란 프로그램을 설계할 때 발생했던 문제점들을 객체 간의 상호 관계 등을 이용하여 해결할 수 있도록 하나의 ‘규약’ 형태로 만들어 놓은것
⭐코드를 재사용하기 쉽게 한 일종의 템플릿처럼 규약을 정리해서 만든 것!
어떤 상황에 어떤 패턴을 사용했는지, 개발자들간에서도 자주 이용하는 개념
하나의 인스턴스에서 리소스를 관리하고 어플리케이션 내에서 전역적으로 접근할 수 있도록 도와주는 패턴
singleton 객체{ constructor(){ instance{…} } }
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는 하나의 인스턴스를 갖는다
TDD(Test Driven Development)를 할때 걸림돌이 된다
주로 단위 테스트를 할때 테스트는 서로 독립적이어야하는데 싱글톤 패턴은 미리 생성된 하나의 인스턴스를 기반으로 구현하는 패턴이므로 각 테스트마다 '독립적인' 인스턴스를 만들기 어렵다.
의존성이 높아진다는 단점도 있다의존성이란 종속성이라고도 하며 A가 B에 의존성이 있다는 것은 B의 변경 사항에 대해 A또한 변해야 된다는 것을 의미
메인모듈(main module)이 '직접' 하위 모듈에 의존성을 주기보다는 중간에 의존성 주입자(dependancy injector)끼어 넣어 '간접'적으로 의존성을 주입하는 방식