Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 자바
- Controller 테스트
- springDataJpa
- Repository 테스트
- Entity
- 원시 자료형
- 스터디
- 공유락
- 테스트 코드
- @Version
- 스프링 부트
- do...while
- jvm
- 낙관락
- 디자인 패턴
- 비즈니스 로직
- 트랜잭션 락
- Service 테스트
- OOP
- 배열
- DTO
- Java
- 자료구조
- Array
- 스네이크 케이스
- 마이크로서비스 아키텍처
- @Query
- 배타락
- 비링크
- 파스칼 케이스
Archives
- Today
- Total
menuhwang
싱글톤 패턴 : 디자인 패턴 본문
싱글톤 패턴
단 하나의 객체만을 생성하게 강제하는 패턴
싱글톤
class Singleton {
private static Singleton one;
private Singleton() {
}
public static Singleton getInstance() {
if(one==null) {
one = new Singleton();
}
return one;
}
}
public class Sample {
public static void main(String[] args) {
Singleton singleton1 = Singleton.getInstance();
Singleton singleton2 = Singleton.getInstance();
System.out.println(singleton1 == singleton2); // true 출력
}
}
클래스 변수로 인스턴스를 담을 변수 one (이하 one)를 선언해준다.
그리고 기본 생성자에 private 접근제어자를 붙여 사용자가 임의로 인스턴스를 생성하지 못 하도록 막아준다.
one에 생성된 인스턴스가 없다면 인스턴스를 생성에 one에 담아 리턴해준다.
one에 이미 인스턴스가 담겨있다면 그것을 리턴해준다.
※ 위 예제는 Thread Safe 하지는 않다.
만약 스레드A가 one에 담긴 인스턴스가 없어 인스턴스를 생성하려하는데
이때 스레드B가 one에 담긴 인스턴스가 있는지 없는지 확인하고 있다면,
스레드A가 인스턴스 생성 전이라면 스레드B도 인스턴스를 생성하게 될 것이다.
따라서, 위 방법은 Thread Safe 하지 않다.
(2022. 10. 19 추가)
왜?
GC(Garbage Collection)을 줄이기 위해 사용한다. 만약 싱글톤 패턴을 적용하지 않고 모든 요청에 각각 인스턴스를 생성한다면 불필요하게 많은 메모리를 잡아먹게된다. 따라서, 싱글톤 패턴을 적용시켜 하나의 인스턴스로 모든 요청을 처리하게 된다.
스프링
스프링의 IoC, DI와 싱글톤 패턴을 비슷하게 볼 수 있다. 스프링의 IoC, DI에 싱글톤이 적용되어 동작하고 있다고 볼 수 있다. 컨테이너에서 빈에 등록, 관리로 의존성을 주입해줄때 하나의 인스턴스로 관리할 수 있는 점이 비슷하다. 하지만 스프링 부트에서 적용되는 싱글톤과는 상이한 부분이 있다.
'스터디 > etc' 카테고리의 다른 글
URL URI 차이 [결론 못냄] (0) | 2022.08.22 |
---|---|
프록시 패턴 : 디자인 패턴 (1) | 2022.08.20 |
REST API (0) | 2022.08.20 |
도메인 비즈니스 로직 (0) | 2022.08.19 |
디자인 패턴 (0) | 2022.08.19 |
Comments