디자인 패턴이란?
소프트웨어 디자인 패턴(software design pattern)은 소프트웨어 공학에서 소프트웨어 디자인에서 특정 문맥에서 공통적으로 발생하는 문제에 대해 재사용 가능한 해결책이다.
디자인 패턴의 종류로는
생성패턴(Creational Patterns)
구조패턴(Structural Patterns)
행위패턴(Behaviral Patterns)
이 있다
각 패턴마다 세분화되어있는 패턴이 존재하고 있지만 이 글에서는 생성패턴의 싱글톤 패턴에 대해 알아보도록 하겠다.
추후 빌더 패턴, 추상팩토리 패턴에 정리할 예정.
1. 싱글톤 패턴 (Singleton)
싱글톤 패턴이란 인스턴스가 오직 1개만 생성되야 하는 경우에 사용되는 패턴이다.
왜 싱글톤 패턴을 사용하느냐..?
동일한 역할을 하는 인스턴스를 여러개 생성하면 메모리를 낭비하기 때문이다.
또한 싱글톤으로 만들어진 클래스의 인스턴스는 전역 인스턴스이기 때문에 다른 클래스의 인스턴스들이 데이터를 공유하기 쉽다. 예를들어 DBCP(DataBase Connection Pool) 처럼 공통된 객체를 여러개 생성해서 사용해야하는 상황에 많이 사용된다.
자바 싱글톤과 스프링의 싱글톤은 차이가 존재한다.
차이점을 간단하게 말하자면 스프링의 싱글톤은 스프링 컨테이너에 의해 구현되고 자바 싱글톤은 클래스로더에 의해 구현된다는 점과, 스프링의 싱글톤은 Thread safety를 자동으로 보장해주지만, 자바로 구현하는 싱글톤의 경우 개발자에 따라서 Thread safety를 보장하지 못할 수도 있다.
자바 싱글턴 패턴 간단한 예시)
static 객체를 통해서 해당 객체를 1개만 생성할 수 있도록 지정한다.static 메서드를 통해서만 객체를 생성하도록 한다.new 연산자를 통해서 객체를 만드는 것을 private 생성자를 통해 제한한다.
스프링 싱클톤 패턴
스프링 컨테이너는 싱글톤 패턴을 적용하지 않아도 객체 인스턴스를 싱글톤으로 관리한다. 이러한 기능 덕분에 싱글톤 패턴의 모든 단점을 해결하고 객체를 싱글톤으로 유지할 수 있다.
@Bean 을 통해 빈을 생성하였다.
객체를 2개 (bean, bean1)을 생성하여 주소를 찍어보았다.
싱글톤 패턴이기 때문에 같은 주소를 가르키고 있다.
참조
싱글턴 패턴(Singleton Pattern)
자바와 스프링의 싱글턴 패턴(Singleton Pattern)과 차이점
webdevtechblog.com
https://velog.io/@jaeeunxo1/spring-singleton
스프링 핵심원리 - 싱글톤패턴
웹 애플리케이션과 싱글턴 1. 싱글턴 패턴(Singleton pattern) > 소프트웨어 디자인 패턴에서 싱글턴 패턴을 따르는 클래스는, 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최
velog.io
'JAVA SPRING' 카테고리의 다른 글
빌더패턴(Builder Pattern) (0) | 2021.07.18 |
---|---|
JUnit 5 (0) | 2021.06.27 |
서블릿(Servlet) 이란? (0) | 2021.06.04 |
@Transactional (0) | 2021.06.03 |
Spring WebFlux란? (0) | 2021.05.29 |