[디자인 패턴] 싱글톤 패턴(Singleton pattern)이란?

James·2023년 7월 25일
1
post-thumbnail

싱글톤 패턴(Singleton pattern)이란?


개념 : 애플리케이션이 시작될 때, 어떤 클래스가 최초 한 번만 메모리를 할당(static)하고 해당 메모리에 인스턴스를 만들어 사용하는 패턴

즉, '하나'의 인스턴스만 생성하여 사용한는 디자인 패턴이다.


싱글톤 패턴 왜 쓸까 ?


  • 지정한 클래스의 인스턴스가 절대로! 1개밖에 존재하지 않는 것을 보증하고 싶을 때
  • 인스턴스가 1개밖에 존재하지 않는 것을 프로그램 상에서 표현하고 싶을 때
  • 싱글톤으로 구현한 인스턴스는 '전역'이므로, 다른 클래스의 인스턴스들이 데이터를 공유하는 것이 가능한 장점이 있다.

많이 사용하는 경우

  • 주로 공통된 객체를 여러개 생성해서 사용해야하는 상황

데이터베이스에서 커넥션풀, 스레드풀, 캐시, 로그 기록 객체 등

안드로이드 앱 : 각 액티비티 들이나, 클래스마다 주요 클래스들을 하나하나 전달하는게 번거롭기 때문에 싱글톤 클래스를 만들어 어디서든 접근하도록 설계함

  • 또한 인스턴스가 절대적으로 한 개만 존재하는 것을 보증하고 싶을 때 사용함

싱글톤 패턴의 장단점


장점

  • 고정된 메모리 영역을 얻으면서 한번의 new로 인스턴스를 사용하기 때문에 메모리 낭비를 방지할 수 있다.
  • 싱글톤으로 만들어진 클래스의 인스턴스는 전역이기 때문에 다른 클래스의 인스턴스들이 데이터를 공유하기 쉽다.
  • 인스턴스가 절대적으로 한 개만 존재하는 것을 보증하고 싶을 경우 사용한다.
  • 두 번째 이용시 부터는 객체 로딩 시간이 줄어 성능이 좋아지는 장점이 있다.

단점

  • 싱글톤 인스턴스가 너무 많은 일을 하거나 많은 데이터를 공유시킬 경우에 다른 클래스의 인스턴스들 간에 결합도가 높아져 객체 지향 설계 원칙 중에"개방-폐쇄 원칙"을 위배하게 된다.

[개방 폐쇄 원칙 (Open-Closed Principle) ]
: 객체를 다룸에 있어서 객체의 확장은 개방적으로, 객체의 수정은 폐쇄적으로 대하는 원칙
즉, 보여줄건 보여주고 숨길건 숨긴다.

  • 이는 객체 지향 설계에 어긋나기 때문에 수정이 어려워지고 유지보수의 비용이 높아진다.
  • 멀티 쓰레드 환경에서 동기화 처리를 안하면 인스턴스가 2개가 생성될 가능성이 생기게 된다.

이러한 이유로 싱글턴 패턴이 꼭 필요한 경우가 아니라면 지양해야 한다.


Reference & Additional Resources

profile
의미있는 성장의 태도, 긍정적인 사고를 지닌 Deveolper

0개의 댓글