일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- SeongSeobDang
- SSAFY 화이팅
- 우유아야
- BFS
- 텐션 업 10기 화이팅
- Have a good day :)
- 아자아자 화이팅
- have a nice day
- HAVE A GOOD DAY
- SSAFY 10기 화이팅
- Have a nice day.
- 우유가 옆으로 넘어지면 아야
- 텐션 업 10기!
- 자고 싶다
- 코로나 싫어요
- SSAFY 테스트
- SSAFY IM/A
- 네트워크
- LeetCode #릿코드 #좋은 하루 되세요 #Have a nice day
- 수학
- 자료구조
- DFS
- 모르고리즘
- Java 환경 설정
- 우유가옆으로넘어지면아야
- Hamming weight
- I am Korean
- amazon
- DP
- Today
- Total
Hope Everyone Is Happy
1. 싱글톤 패턴 ( Singleton Pattern ) 본문
재미있따~
본 게시글은 책 : 면접을 위한 CS 전공지식 노트 (출판사 : 길벗, 주홍철 지음) 을 참조하여 작성하였습니다.
♣ 싱글톤 패턴 ( Singleton Pattern ) ?
- 싱글톤 패턴이란 하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴
- 본래 하나의 클래스는 여러 개의 개별적인 인스턴스를 만들 수 있지만, 강제적으로 하나만 만들 수 있게 설계
- 하나의 인스턴스를 생성하여 다른 모듈들이 공유하며 사용
♣ 싱글톤 패턴의 장점
- 한번의 메모리 할당 이후 고정되어 계속 사용하기 때문에 메모리 낭비를 방지.
- 이미 생성된 인스턴스 활용으로 인해 속도가 상승
- 다른 클래스의 인스턴스들이 데이터를 공유하기 쉽다.
♣ 싱글톤 패턴의 단점
- 첫 객체 선언에 있어서 코드가 많이 필요.
- 멀티 스레드 상황에 있어서 예외처리 필요 ( 2개 이상의 스레드에서 동시에 데이터 접근 시 문제 발생)
- 자식 클래스를 만들 수 없으며, 내부 상태를 변경하기 어려워지는 등 객체지향설계에 있어서 제한 발생
( 조사하다 보니 SOLID 원칙에 위배될 수 있는 상황이 많다는데, 차후 SOLID원칙 공부 후 수정하도록 하겠습니다. )
♣ 의존성 주입
- 싱글톤 패턴의 특성상 인스턴스값이 바뀌면 메인 모듈의 값이 반드시 변하게 됨. ( 의존성이 강함 )
- 이를 방지 하기 위해 메인 모듈에 들어오기전에 의존성 주입자를 생성하여 의존성을 낮춤.
( 클래스 - 인스턴스 => 클래스 - 의존성 주입자 - 인스턴스 )
♣ 예시 코드
class SingleTon {
private int nTestNum;
private int nTestNum22;
private SingleTon() {
}
private static class singleInstanceHolder {
private static final SingleTon INSTANCE = new SingleTon();
}
public static SingleTon getInstance() {
return singleInstanceHolder.INSTANCE;
}
public int getnTestNum() {
return nTestNum;
}
public void setnTestNum(int nTestNum) {
this.nTestNum = nTestNum;
}
public int getnTestNum22() {
return nTestNum22;
}
public void setnTestNum22(int nTestNum22) {
this.nTestNum22 = nTestNum22;
}
}
public class SingleTonTest {
public static void main(String[] args) {
SingleTon t1 = SingleTon.getInstance();
SingleTon t2 = SingleTon.getInstance();
t1.setnTestNum(2);
t1.setnTestNum22(4);
// 싱글톤 디자인 특성 살려버리기.
System.out.println(t2.getnTestNum());
System.out.println(t2.getnTestNum22());
}
}
▷ 코드 내 핵심 사항
1. Private static 형태로 전역에서 사용할 수 있는 인스턴스를 하나 선언
private static final SingleTon INSTANCE = new SingleTon();
2. 생성된 인스턴스를 전역에서 접근 가능하도록 getInstance 접근자 생성
3. 생성자의 접근 속성을 private으로 설정하여 인스턴스 생성 방지
4. main 문에서 여러가지 인스턴스 이름을 활용하여 접근하여도 동일한 인스턴스 공유
위의 내용과 관련하여 추가적인 내용이나 피드백은 언제나 환영입니다 :)
'※ CS 스터디 > 디자인 패턴' 카테고리의 다른 글
5. 프록시 패턴 (Proxy pattern) (0) | 2023.08.02 |
---|---|
4. 옵저버 패턴 (Observer Pattern) (0) | 2023.08.02 |
3. 전략 패턴 ( strategy pattern ) (0) | 2023.08.02 |
2. 팩토리 패턴 ( Factory Pattern ) (0) | 2023.08.02 |
0. 디자인 패턴 개요 (0) | 2023.08.02 |