CS

싱글톤 패턴(Singleton Pattern)

NelchuPapa 2024. 11. 21. 22:56
반응형

싱글톤 패턴(Singleton Pattern)이란 무엇이며, 어떤 경우에 사용하나요?

 

 


디자인 패턴

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

 

싱글톤 패턴:

그중 하나인 싱글톤 패턴은 하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴이다. 하나의 클래스를 기반으로 여러개의 개별적인 인스턴스를 만들 수 있지만, 그렇게 하지 않고 하나의 클래스를 기반으로 하나의 인스턴스를 만들어 놓고 이를 기반으로 로직을 만드는 데 사용한다. 주로 데이터 베이스 연결 모듈에 많이 사용한다.

 

인스턴스란?

클래스를 기반으로 만들어진 실제 객체이다. 클래스를 집을 짓기 위한 설계도라고 했을때, 인스턴스는 설계도를 기반으로 만들어진 실제 집인 것이다.

 



싱글톤 패턴
싱글톤 패턴

 

 


 

 

 

장점 

  • 비용: 하나의 인스턴스 제작 후 해당 인스턴스를 다른 모듈에 공유하면서 사용해서 인스턴스를 생성할 때 드는 비용이 줄어든다.
  • 전역 접근성: 전역적으로 접근 가능하므로, 자주 사용되는 리소스(예: 설정 정보, 네트워크 관리 등)를 관리하기에 적합합니다.

 

단점

  • 테스트 어려움: TDD의 단위 테스트에서 각각의 테스트가 서로 독립적이어야 하는데 테스트를 어떤 순서로든 실행 가능해야 하는데 싱글톤은 하나의 인스턴스를 기반으로 구현해야 하기 때문에 독립적인 인스턴스를 만들기가 어렵다.
  • 코드 결합도 증가: 싱글톤 인스턴스를 여러 클래스에서 참조하면 의존성이 높아지고, 코드 변경이 어렵거나 다른 모듈과 독립적으로 유지하기 어려워질 수 있습니다.

 

 

 

그럼 어떻게 단점을 보완하면서 사용할까?

 

 

 


 

 

의존성 주입

의존성 주입은 객체가 스스로 사용할 다른 객체(의존성)를 직접 생성하지 않고, 외부에서 주입받는 방식을 말합니다.
여기서 말하는 의존성은 A가 B에 의존성이 있다고 가정할 때 B의 변경 사항이 발생한 것에 대해 A 또한 변해야 한다는 것을 의미

 

쉽게 말해 피자를 직접 사는 것이 아니라 배달받는 것, 피자가 먹고 싶을 때 피자를 직접 만들어서 먹지 않고 배달시키는 것과 유사한 상황이다.

 

 

의존성 주입 전

  • 객체가 자신이 필요로 하는 다른 객체(의존성)를 스스로 생성하고 관리합니다.
  • 객체가 고정된 의존성을 사용하기 때문에 유연하게 사용하기가 힘들다.

의존성 주입 후

  • 객체는 필요한 의존성을 외부(의존성 주입자)에서 주입받게 된다. 자신은 의존성의 생성과 관리에 관여하지 않습니다.
  • 특정 의존성에 묶이지 않아, 다양한 상황에서도 쉽게 재사용 가능하다.

 

 


 

 

의존성 주입 장점

  • 모듈을 쉽게 교체할 수 있는 구조가 되어 테스팅이 쉬워졌다.
  • 애플리케이션의 의존성 방향이 일관되고, 모듈 간의 관계들이 조금 더 명확해진다.

 

의존성 주입 단점

  • 모듈들이 더 분리되었기 때문에 클래스 수가 늘어나 복잡성이 더 증가할 수 있다. 이에 따라 런타임에 의존성을 처리하느라 성능 저하의 가능성이 존재한다
  • 의존성을 외부에서 주입하도록 설정하는 초기 과정이 복잡할 수 있습니다.
  • 의존성 주입의 개념과 구현 방법에 익숙하지 않은 초보 개발자에게는 다소 어려울 수 있습니다.

 

 

 

Reference

 


 

 

https://product.kyobobook.co.kr/detail/S000001834833

 

면접을 위한 CS 전공지식 노트 | 주홍철 - 교보문고

면접을 위한 CS 전공지식 노트 | 디자인 패턴, 네트워크, 운영체제, 데이터베이스, 자료 구조, 개발자 면접과 포트폴리오까지! CS 전공지식 습득과 면접 대비, 이 책 한 권이면 충분하다! 개발자 면

product.kyobobook.co.kr

 

 

이미지 

https://refactoring.guru/ko/design-patterns/singleton

반응형