개발자 랩실/스프링&스프링부트
[Java] 싱글톤 패턴
sina.dev
2022. 2. 26. 13:37
728x90
목차
1. 싱글톤 패턴이란
객체의 인스턴스가 오직 1개만 생성되는 패턴을 의미한다. 애플리케이션 실행 시 최초 1번만 올라가고, 더 이상 객체가 올라가지 않을 때 사용하는 패턴을 말한다.
스프링이나 스프링부트에서 Bean 어노테이션을 이용해 싱글톤 패턴으로 객체를 선언한다.
2. 싱글톤 패턴 사용 이유
- 최초 한번의 new 연산자를 통해 고정된 메모리 영역을 사용한다.
- 해당 객체에만 접근하기 때문에 메모리 영역의 낭비를 방지한다.
- 다른 클래스 간에 데이터 공유가 쉽다.
- 전역으로 인스턴스가 관리된다.
- 싱글톤 패턴 사용 : DBCP (Database Connection Pool), 로그
static 선언자를 이용한 싱글톤 패턴
public class TestSingleton {
private static TestSingleton instance = new TestSingleton();
private TestSingleton() {
// 생성자는 외부에서 호출못하게 private 으로 지정해야 한다.
}
public static TestSingleton getInstance() {
return instance;
}
public void call() {
System.out.println("hi, there");
}
}
@Bean 어노테이션을 이용한 패턴
@Bean
public class TestSingleton {
// 클래스 내부 구현
}
3. 싱글톤 패턴 문제
- 동시성 문제가 발생한다.
- 동시성 문제 해결을 위한 syncronized 키워드를 사용해야 하는데, syncronized 키워드 사용은 비용 발생한다.
- 테스트 진행 시 인스턴스의 상태를 초기화해야 한다.
- new 키워드를 직접 사용하여 클래스 안에서 객체를 생성한다.
- 유연성이 떨어진다.