본문 바로가기
ComputerScience/(짧)CS전공지식노트

1장-디자인 패턴) Singleton 패턴

by VictorMeredith 2023. 2. 18.

1.1 디자인 패턴이란?

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

 

1.1.1 Singleton Pattern

- 하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴

- DB 연결 모듈이 많이 사용한다.

- 하나의 인스턴스를 만들어 놓고 해당 인스턴스를 다른 모듈들이 공유하며 사용하므로, 생성비용이 줄어든다.

- 의존성이 높아지는 단점이 있다.

- 단점1) TDD(Test Driven Development)할 때 걸림돌이 된다 : 단위테스트에서 각 테스트마다 독립적인 인스턴스를 만들기가 어렵다.

- 단점2) 의존성 : 사용하기 쉽고 실용적이지만, 모듈 간의 결합을 강하게 만드는 단점이 있다.

   이 때 의존성 주입(DI, Dependency Injection)을 통해 모듈 간의 결합을 느슨하게 만들어줄 수 있다.

 

   ❓의존성이란 ? : 종속성이라고도 하며, (A가 B에 의존성이 있다 === B의 변경사항에 대해 A도 변해야 한다.)

 

- 의존성 주입 : 메인 모듈과 하위 모듈의 중간에 의존성 주입자(dependency injector)가 이 부분을 가로채, 메인모듈이 간접적으로 의존성을 주입한다. 이를 통해 메인 모듈은 하위 모듈에 대한 의존성이 떨어진다. 이를 '디커플링 된다' 라고도 한다.

   

- 의존성주입의 장점 : 의존성주입을 하면 모듈을 쉽게 교체할 수 있게되어 단위테스팅이 쉽고, 마이그레이션도 수월해진다.

또한, 구현 시에 구현체를 넣어 주기 때문에, 애플리케이션 의존성 방향이 일관되고, 쉽게 추론할 수 있으며, 모듈 간의 관계가 더 명확해진다.

- 의존성주입의 단점 : 모듈들이 더욱 더 분리되어 복잡하고 런티임패널티가 생긴다.

- 의존성 주입 원칙 : 상위 모듈은 하위 모듈에서 어떠한 것도 가져오지 않아야 한다. 또한, 둘 다 추상화에 의존해야 하며, 이 때 추상화는 세부 사항에 의존하지 말아야 한다.

 

Example

Singleton.instance라는 하나의 인스턴스를 가진 클래스 구현

- a 와 b는 하나의 인스턴스를 가진다.

 

DB연결모듈 example

DB.instance 인스턴스 기반의 a,b

mongooseDB연결모듈 example

 

댓글