싱글톤 패턴이란?
싱글톤...single...single...
싱글톤은 하나만 가지고 노는 패턴 입니다.
즉, 하나의 클래스에 하나의 인스턴스만 가집니다.
예를 들면....
책 하나 사서 친구랑 돌려보기,,,
게임cd 하나 사서 친구랑 돌려쓰기 같은 느낌인 것 같습니다.
즉 하나를 생성해서 여기저기 쓰는 패턴을 말합니다.
자바스크립트의 싱글톤
ex1)
const ob1 ={
num1: 1
}
const obj2 ={
num: 1
}
console.log(obj1 === obj2) // false
ex2)
let instance;
let Singleton = {
instance: instance,
createInstance: function () {
let object = new Object("I am the instance");
return object;
},
getInstance: function () {
if (!instance) {
console.log("haha");
instance = Singleton.createInstance();
}
return instance;
},
};
let instance1 = Singleton.getInstance();
let instance2 = Singleton.getInstance();
console.log(instance1); //[String: 'I am the instance']
console.log(instance2); //[String: 'I am the instance']
console.log(instance1 === instance2); // true
스프링에서 singleton...
스프링에서도 singleton을 종종 봤었는데요,
1)scope 어노테이션
클래스위에 @scope("singleton") //기본값
를 쓰면 클래스를 싱글톤으로 사용하고
@scope("prototype") => 하나의 클래스에 여러객체 사용가능
@scope("request") => 하나의 request 생명주기에는 하나의 객체만 유지함
...
2)db를 연결할 때
db를 연결할때도 싱글톤 패턴을 썼던 기억이 납니다.
A와 DB를 연결 할때, 굳이 객체를 여러개 만들어서 연결을 할필요는 없겠죠?
하나의 연결만 사용하면 되기 때문에 이 상황에서도 싱글톤 패턴을 썼습니다.
싱글톤 패턴의 장점
일단 하나의 인스턴스로만 관리하기 때문에 메모리 절약이 가능합니다.
(하나의 책을 사서 돌려보면 돈 절약가능)
싱글톤 패턴의 단점
결합도가 매우 높아져버려 객체지향 설계를 위반해버립니다.
또한 TDD를 할때 방해가됩니다. => (결합도가 높아 단위테스트하기가 힘듬)
강한 결합을 해결하는법
DI(Dependency Injection)(의존성주입)
A->B->C
이러한 의존관계를
D->A
D->B
D->C
로 바꿔줘서 결합도를 낮출 수 있습니다.
'공부 정리 > 웹(Web)' 카테고리의 다른 글
테스트 피라미드 (0) | 2022.06.28 |
---|---|
Js for in Vs for of (0) | 2022.05.20 |
CSR vs SSR 비교 (0) | 2022.04.21 |
JS 배열 필수함수 (Array Function) (0) | 2022.03.25 |
JS this (0) | 2022.03.18 |
댓글