싱글톤 패턴이란?
: 객체의 인스턴스가 오직 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
'JAVA' 카테고리의 다른 글
Java - Checked Exception VS Unchecked Exception (0) | 2022.03.10 |
---|---|
Java - 커맨드패턴(Command Pattern) (0) | 2022.02.22 |
Java - try-with-resources를 통한 자원해제방법 (0) | 2022.02.14 |
Java - 정규표현식 정리 (0) | 2022.02.07 |
Java - 자료구조와 컬렉션 프레임워크 (0) | 2022.01.23 |