일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Programmers도둑질
- 객체지향다형성
- node의존성주입
- 자바리스트정렬
- Programmers가장큰수
- 우선순위큐자바
- 모놀리틱 아키텍처
- 자바스크립트filter
- 자바스크립트foreach
- 자바배열정렬
- 자바Comparable
- 스프링핵심요소
- 프로젝트회고
- 자바foreach
- openvidu
- 자바stream
- 클라우드타입
- 프로그래머스도둑질
- 자바스크립트map
- 프로그래머스가장큰수
- 자바스크립트reduce
- 자바Comparator
- 객체지향solid
- 자바filter
- webrtc
- 도둑질자바
- 팀프로젝트
- 자바reduce
- 자바 가비지컬렉션
- 객체지향추상화
- Today
- Total
I'm pine thank you and you?
[디자인 패턴, JAVA] Singleton Pattern(싱글톤 패턴) 정의, 목적, 용도 본문
Singleton Pattern
정의
객체의 인스턴스를 오직 1개만 생성할 수 있는 패턴
public class Singleton {
// 외부에서 직접 인스턴스 생성을 못하도록 생성자의 접근 지정자 private
private Singleton() {}
// static하게 데이터를 만들어서 주입하고
private static Singleton singleton;
// return
public static Singleton sharedInstance() {
if(singleton == null) {
singleton = new Singleton();
}
return singleton;
}
}
Singleton 클래스 정의
public class Main {
public static void main(String[] args) {
// 싱글톤 패턴으로 디자인 된 클래스의 인스턴스 생성
Singleton singleton1 = Singleton.sharedInstance();
Singleton singleton2 = Singleton.sharedInstance();
// 해시코드 확인
System.out.println(System.identityHashCode(singleton1));
System.out.println(System.identityHashCode(singleton2)); // 똑같은 해시코드가 나온다.
}
}
인스턴스 생성
목적
- 메모리 측면
최초 한 번의 new 연산자를 사용하여 고정된 메모리 영역을 사용하고 접근하므로 메모리 낭비 방지
- 속도 측면
이미 생성된 인스턴스를 사용하므로 속도 향상
- 데이터 공유 용이
싱글톤 인스턴스가 전역으로 사용되는 인스턴스이기 때문에 다른 클래스의 인스턴스가 접근이 용이하다.
But, 동시성 문제: 다른 인스턴스에서 한 인스턴스에 동시 접근하면서 생길 수 있는 문제 주의
- 인스턴스가 1개만 있다는 것을 보증하고 싶을 때
ex) 설정파일의 경우 인스턴스가 여러개 생기면 설정 값이 변경될 위험이 있음
용도
Spring의 bean은 기본적으로 Singleton패턴이 적용되어있다.
서버 애플리케이션
👉 서버는 하나의 인스턴스를 이용해서 멀티 스레드로 클라이언트의 요청을 처리하기 때문에 서버에서는 하나의 클래스에 대한 인스턴스를 1개만 만드는 것이 일반적이다.
👉 서버에서 `작업을 처리하는 클래스`나 `공유자원을 소유하는 클래스`에 싱글톤 패턴을 많이 적용한다.
'CS' 카테고리의 다른 글
[DB] Redis 개념, 특징 (0) | 2023.03.22 |
---|---|
WebRTC가 무엇일까? (용어, 샘플, openvidu) (0) | 2023.03.04 |
[아키텍처] MSA / 멀티모듈 단일프로젝트? 단일모듈 멀티프로젝트? (0) | 2023.02.12 |
[클라우드 컴퓨팅] IaaS, PaaS, SaaS (0) | 2023.02.06 |
[JAVA, JS] map, filter, reduce, forEach (0) | 2023.01.20 |