[면접을 위한 CS 전공지식 노트] 디자인 패턴 - 싱글톤 패턴

Yijun Jeon·2023년 12월 27일
0

CS 전공지식

목록 보기
1/21
post-thumbnail

디자인 패턴

💡 디자인 패턴이란?

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

싱글톤 패턴

💡 싱글톤 패턴 (singleton pattern) 이란?

  • 하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴
  • 보통 데이터베이스 연결 모듈에 많이 사용

🔗 실제 사용

  • Node.js - MongoDB - 데이터베이스 연결 mongoose 모듈
  • Node.js - MySQL - 데이터베이스 연결

장점

  1. 인스턴스를 생성할 때 드는 비용이 줄어듦
  2. 사용하기 쉽고 실용적임

단점

  1. TDD(Test Driven Development) 시 걸림돌

    • 단위 테스트는 테스트가 서로 독립적이어야 하고 테스트를 어떤 순서로든 실행할 수 있어야 함
  2. 의존성이 높아짐

🔗 자바스크립트 싱글톤 패턴
👉 자바스크립스의 리터럴 {} 또는 new Object로 객체 생성시 다른 어떤 객체와도 같지 않으므로 이 자체만으로도 싱글톤 구현

const obj1 = {
  a: 27
}

const obj2 = {
  a: 27
}

console.log(obj1 === obj2) // false

⭐️ 실제 싱글톤 구현 코드

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

🔗 자바 싱글톤 패턴

class Singleton{
	private static class singleInstanceHolder{
    	private static final Singleton INSTANCE = new Singleton();
    }
	public static Singleton getInstance(){
    	return singleInstanceHolder.INSTANCE;
    }
}

Singleton a = Singleton.getInstance();
Singleton b = Singleton.getInstance();
// a.hashCode == b.hashCode

의존성 주입

💡 의존성 주입(Dependency Injection)이란?

  • 싱글톤 패턴의 모듈 간의 강한 결합을 느슨하게 만드는 방법
  • 모듈 계층의 중간에 의존성 주입자 활용하여, 메인 모듈이 '간접'적으로 하위 모듈에 의존성을 주입하는 방식
    • 이를 '디커플링 된다' 라고도 함

의존성 주입 원칙

👉 "상위 모듈은 하위 모듈에서 어떠한 것도 가져오지 않아야 합니다. 또한, 둘 다 추상화에 의존해야 하며, 이때 추상화는 세부 사항에 의존하지 말아야 합니다."

장점

  1. 모듈들을 쉽게 교체할 수 있는 구조가 됨
    • 테스팅하기 쉬움
    • 마이그레이션 수월
  2. 추상화 레이어를 넣어, 이를 기반으로 구현체를 넣음
    • 애플리케이션 의존성 방향이 일관됨
    • 애플리케이션 쉽게 추론
    • 모듈 간의 관계들이 명확해짐

단점

  1. 모듈들이 더욱더 분리돼 클래스 수 증가
    • 복잡성 증가
    • 약간의 런타임 패널티

0개의 댓글