본문 바로가기

JAVA

Java - 싱글톤 패턴(Singleton Pattern)

싱글톤 패턴이란?

: 객체의 인스턴스가 오직 1개만 생성되는 패턴. 어떤 클래스가 최초 한번만 메모리를 할당하고 (보통 static 영역) 그 메모리에 인스턴스를 만들어 사용하는 디자인 패턴이다. 인스턴스가 필요할 때 만들어내는 것이 아닌 기존 인스턴스를 사용한다.

IoC특징을 가지는 Spring FrameWork에서 Bean으로 등록되는 컨테이너들이 싱글톤 패턴을 사용하여 하나의 인스턴스만 생성하여 관리한다.

싱글톤 패턴을 사용하는 이유

- 고정된 메모리 영역을 사용하기 때문에 메모리 낭비를 방지할 수 있다

- 전역으로 사용되는 인스턴스이기 때문에 다른 클래스간에 데이터 공유가 쉽다.

- 도메인 관점에서 인스턴스가 한개만 존재할 수 있도록 보증하고 싶은 경우

싱글톤 패턴의 문제점

- 멀티스레드 환경에서 주의해야한다. 인스턴스가 한개이기 때문에 자칫 인스턴스 내용이 의도하지 않는 내용으로 변할 수도 있고, 인스턴스가 2개 생성이 된다는 등의 문제가 발생할 수 있다. syncronized 키워드를 사용하거나, 읽기전용 인스턴스로 설계를 하는 등의 내용을 고민해야 한다.

- 테스트하기가 어렵다. 격리된 환경에서 수행되려면 매번 인스턴스의 상태를 초기화 시켜줘야 한다.

- 인스턴스가 너무 많은 일을 하거나 많은 데이터를 공유시키는 경우 다른 클래스의 인스턴스 사이에 결합도가 높아져 개방-폐쇄 원칙에 위배된다. (객체 지향 설계 원칙에 어긋남)

참고자료

= https://tecoble.techcourse.co.kr/post/2020-11-07-singleton/

= https://jeong-pro.tistory.com/86

= https://velog.io/@eesiwoo/%EC%8B%B1%EA%B8%80%ED%86%A4-%ED%8C%A8%ED%84%B4