일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- IntelliJ
- 프로젝트
- 스프링
- 백준
- 팀프로젝트
- JDK
- 코테
- 입출력
- 디자인패턴
- SpringBoot
- React
- ps
- AWS
- 취준생
- jdk11
- JPA
- 자바
- javascript
- Controller
- MariaDB
- gradle
- 코딩테스트
- spring
- Java
- coding test
- Project
- 자취
- 공유DB
- spring boot
- MVC
Archives
- Today
- Total
Tech Collection
[Design Pattern] Signleton Pattern 본문
728x90
반응형
싱글톤 패턴
- 해당 클래스의 인스턴스가 최대 한 개까지만 만들어진다.
- 유일한 인스턴스를 어디서든지 접근할 수 있도록 할 수 있다.
- Java에서는 private 생성자와 정적메소드, 정적 변수를 사용
Singleton Pattern 형식
public class Test {
// 정적 변수
private static Test t;
// private 생성자
private Test() { }
// 정적 메소드
public static Test getInstance() {
if(t == null) {
t = new Test();
}
return t;
}
}
- 다중 스레드를 사용하는 어플리케이션에서는 속도와 자원 문제를 파악해보고 적절한 구현법을 사용해야 한다.
→ DCL (Double-Checking Locking) 을 써서 getInstance()에서 동기화되는 부분을 줄인다.
public class Test {
private volatile static Test t;
private Test() { }
public static Test getInstance() {
if(t == null) {
synchronized (Test.class) {
if(t == null) {
t = new Test();
}
}
}
return t;
}
}
- volatile
- 멀티스레드를 사용하더라도 정적 변수가 Singleton 인스턴스로 초기화되는 과정이 올바르게 진행될 수 있도록 할 수 있다.
- getInstance() 메소드:
- 인스턴스가 있는지 확인하고, 없으면 동기화
- → 처음에만 동기화 진행
- 동기화 후에도 다시 한 번 변수가 null인지 확인한 다음 인스턴스를 생성
728x90
반응형
'Concept > Design Pattern' 카테고리의 다른 글
[Design Pattern] Decorator Pattern (0) | 2021.05.30 |
---|---|
[Design Pattern] Factory Pattern (0) | 2021.05.30 |
[Design Pattern] Observer Pattern (0) | 2021.05.30 |
[Design Pattern] Strategy Pattern (0) | 2021.05.30 |
[Design Pattern] 디자인 패턴이란? (0) | 2021.05.26 |