본문 바로가기
Study/개념 정리

[Study] 싱글톤 패턴

by chobbo 2024. 10. 3.

싱글톤 패턴이란?

하나의 클래스가 오직 하나의 인스턴스만을 가지는 패턴이다.

하나의 클래스를 기반으로 여러 개의 인스턴스(메모리에 할당된 객체)를 만들 수 있다.

하지만 하나의 인스턴스만을 가지는 클래스를 통해 로직을 설계해야 하는 경우가 생길 수 있다.

 

싱글톤 패턴은 다음과 같은 상황에 많이 쓰인다.

- 데이터베이스 연결 모듈

- 게임 로직 설계 시 매니저 관리 

 

 

싱글톤 패턴의 장점

1. 인스턴스 생성 비용이 적다.

하나의 인스턴스를 다른 모듈이 공유하며 사용하기 때문에, 추가적인 인스턴스를 생성하지 않아도 된다.

따라서 인스턴스를 생성할 때 드는 비용을 절감할 수 있다.

 

 

싱글톤 패턴의 단점

1. 의존성이 높아진다

싱글톤 패턴을 사용하는 모듈간의 결합이 매우 높아진다.

모듈간의 결합도가 높으면 한 클래스 수정하면 다른 클래스 수정해야 할 가능성이 높아진다.

즉 다른 팀원이 코드를 수정하면 내 코드를 수정해야 할 가능성이 높아진다는 뜻이므로 좋지 않다.

 

이때 의존성 주입을 통해 모듈간의 결합을 느슨하게 만들 수 있다.

 

의존성 주입 (DI, Dependency Injection)

위의 그림처럼 메인 모듈이 각 모듈에 직접 의존성을 주지 않고

오른쪽 그림과 같이 의존성 주입자가 의존성을 주입해주는 방식이다.

(= 디커플링이 된다) 

 

의존성 주입의 장점

모듈을 쉽게 교체할 수 있는 구조가 된다.

모듈간의 관계가 조금 더 명확해진다.

 

의존성 주입의 단점

의존성 주입자를 도입 하는 등 모듈의 수가 늘어나므로 복잡성이 증가될 수 있다.

이를 통해 약간의 런타임 페널티가 생길 수도 있다.

 

의존성 주입 원칙

상위 모듈은 하위 모듈에서 어떤 것도 가져오지 않아야 한다.

상위 모듈과 하위 모듈은 추상화에 의존해야 하며, 추상화는 세부 사항에 의존하지 말아야 한다.

 

 

2. TDD가 어렵다.

TDD(Test Driven Development)란 테스트 주도 개발이다.

소프트웨어 방법론으로 작은 단위의 테스트 케이스를 작성하고 이를 통과하는 코드를 추가하는 단계를 반복하여 구현한다.

 

TDD를 할 때, 각 테스트가 독립적이어야 하고 어떤 순서로든 테스트를 실행할 수 있어야 한다.

하지만 싱글톤 패턴의 경우 미리 생성된 하나의 인스턴스를 기반으로 구현되는 패턴이므로

각 테스트마다 독립적인 인스턴스를 만들기 어렵다.

'Study > 개념 정리' 카테고리의 다른 글

[Study] 디자인 패턴  (0) 2024.10.01
[Study] MVC 패턴  (0) 2024.08.01
[Study] 네트워크 & 렌더링 파이프라인  (1) 2024.07.26
[Study] 게임수학  (0) 2024.07.24
[Study] 멀티스레드 & GPU  (0) 2024.07.23