싱글톤 패턴
하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴
- 장점 - 인스턴스 생성 시 비용이 줄어듬
- 단점 - 의존성이 높아짐
예시코드
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 클래스
const URL = 'URL';
const createConnection = url => ({ url, connected: true });
class DB {
constructor(url) {
if (!DB.instance) {
DB.instance = createConnection(url);
}
return DB.instance;
}
connect() {
return DB.instance;
}
}
const a = new DB(URL);
const b = new DB(URL);
console.log(a === b);
console.log(a.connect());
: DB.instance 라는 하나의 인스턴스를 기반으로 a,b 생성 → 데이터베이스 연결에 관한 인스턴스 생성 비용 아낄 수 있음 !
public class Singleton {
private Singleton() {}
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton(); // 내부 클래스를 사용하여 호출 될 때 인스턴스 생성
}
public static Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}
장단점
- TDD의 걸림돌→ 싱글톤 패턴은 미리 생성된 하나의 인스턴스 기반으로 구현하기 때문에 각 테스트마다 '독립적인’인스턴스`를 만들기 어려움
- → TDD의 대표적인 단위 테스트는 테스트가 서로 독립적 이어야 하며 테스트를 할 때 어떤 순서로든 실행할 수 있어야 함
- 모듈 간의 결합을 강하게 만들 수 있음 →
의존성 주입을 통해 모듈 간의 결합을 조금 더 느슨하게 만들 수 있음.
의존성 주입 (DI)

`종속성` 이라고도 하며 A가 B에 의존성이 있다는 것은, B의 변경 사항에 대해 A 또한 변해야 한다는 것을 의미함
의존성 주입자(dependency injector)을 이용하여 메인 모듈이 ‘간접적’으로 의존성을 주입- → 메인 모듈(상위 모듈)이 하위 모듈에 대한 의존성이 떨어지는 현상 → ‘디커플링이 된다’
의존성 주입 장점
- 모듈을 쉽게 교체할 수 있는 구조가 되어 테스팅 하기 쉽고 마이그레이션하기 쉽다.
- 애플리케이션 의존성 방향이 일관되고, 쉽게 추론가능하며, 모듈간의 관계가 명확해진다.
- (
구현할 때 추상화 레이어를 넣고 이를 기반으로 구현체 넣어주기 때문)
의존성 주입 단점
- 모듈이 더욱 더 분리되어 클래스 수가 늘어나 복잡성 증가 → 런타임 패널티
'[Computer Science] 컴퓨터과학' 카테고리의 다른 글
| [NETWORK] HTTP (4) | 2024.05.24 |
|---|---|
| CDN이란? (1) | 2024.05.24 |
| [Network] Application layer (1) | 2022.12.08 |
| [암호학] 양방향 암호화와 단방향 암호화 (1) | 2022.12.05 |