CheerUp_Cheers
Static, 싱글턴, 내포 클래스 - 싱글턴 본문
싱글턴 패턴
어떤 클래스에서 만들 수 있는 인스턴스를 하나로 제한
다음과 같은 조건 충족하는 개체에 적합
1) 프로그램 실행중 하나만 있어야함 ex) 프로그램설정, 파일시스템
2) 이 개체에 전역적으로 접근이 가능해야함
#싱글턴 클래스 다이어그램
- private 생성자
- static 메소드를 통해서만 개체 얻음
- 아직 개체가 없는 경우
개체를 생성 후 static 변수에 저장
static 변수에 저장된 개체를 반환
- 이미 개체가 있는 경우
static 변수에 있는것 반환
#싱글턴 예
#어디쓸까
Configuration(구성) - 프로그램 창의 위치와 크기, 파일에 저장하거나 로딩.
#싱글턴 vs Static
다 static으로하면 개체도 안만들어도 되고 괜찬지않나?
- static으로 못하는 일
1) 다형성 사용 불가
2) 시그내처를 그대로 둔채 멀티턴패턴으로 바꿀 수 없다. (개체의 숫자가 하나가아니고 몇개로 정한것)
3) 개체의 생성 시점을 제어할 수 없다.
-> Java의 static은 프로그램 실행 시에 초기화 됨
-> 단, 싱글턴도 제어에 어려움 있음.
# 싱글턴 개체의 생성 시기
처음으로 getInstanse()를 사용할떄,
-> 다양한 메서드에서 getInstance()를 사용할 수 도 있음.
- 초기화 순서를 보장하는 방법
외부 API사용할 떄, 순서가 중요할떄가 있음..
프로그램 시작시 여러 싱글턴을 getInstance()를 순서대로 호출..
// 싱글턴을 정해진 순서대로 초기화 해야할 때
B.getInstance();
A.getInstance();
C.getInstance();
# 싱글턴 생성시 인자가 필요한 경우?
다른 클래스에서 loader와 gfxDevice라는 매개변수가 없을 경우가 있음..
-> 싱글턴은 필요에 따라서 변형해서 사용하는것도 괜찬음
# 싱글 턴의 변형 예
1)프로그램 실행시
getInstance()가 아닌 createInstance()로 호출
GrapicsResourceManager.createInstatnce(loader, gfxDevice);
2) 인스턴스가 필요할 떄
매개변수 없는 getInstance()호출
GrapicsResourceManager gfxManager = GrapicsResourceManager.getInstance();
-> cerateInstance()가 먼저 호출됐따는 가정으로 도는 코드
-> 언제나 유효한 상태를 추구하는 OO정신에는 어긋남.
3)프로그램 종료시
메모리 해제.
GrapicsResourceManager.deleteInstancae();
#변형되는것은 사용하지 말아야하나?
실행시 초기화나 종료시 청소하는 함수는 실무로 자주 사용됨.
-> 뺴먹기 어려운 함수들임..
#싱글턴을 안티패턴이라고도 하는데?
안티패턴 : 나쁜 습관, 잘못된 방법
- 이유
static과 똑같다는 이유에서 욕함.
싱글턴 안쓰고도 같은일 할수도 있음
-> 복잡해짐..
- 반박
필요한 도구 중 하나.
'인프런 > 개체지향 프로그래밍 및 설계 (Java)' 카테고리의 다른 글
상속 (0) | 2020.12.13 |
---|---|
Static, 싱글턴, 내포 클래스 - 디자인 패턴 (0) | 2020.12.01 |
Static, 싱글턴, 내포 클래스 (0) | 2020.11.26 |
개체 모델링1 (0) | 2020.11.26 |
클래스 (0) | 2020.11.25 |