| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- 자바
- 다이나믹 프로그래밍
- 익명객체
- 멀티스레드
- dfs
- 재귀함수
- 익명클래스
- 안드로이드
- 개발
- 현대오토에버 코딩테스트
- 프로그래머스
- 너비탐색
- BFS
- 데이터베이스
- Android
- 삼성sw문제
- 모바일
- 네트워크
- dp
- 언더라이터
- IT
- 백준 알고리즘
- backjoon
- 삼성SW테스트
- 조합
- Java
- 백준
- CKLU
- 알고리즘
- 금융IT
- Today
- Total
Limky 삽질블로그
[Design_Pattern] 싱글톤 패턴(Sigleton Pattern) 본문
이번시간에는 자바 싱글톤패턴을 알아보도록 합시다.
실제 안드로이드 업무를 해보면서 처음으로 접해봤던 패턴 중 하나였습니다.
싱글톤 패턴이란?
하나의 클래스에 대해 어플리케이션이 시작될 때 최초의 한번만 메모리를 할당하고(Static을 이용),
그 메모리에 인스턴스를 new한다.
즉 말 그대로 싱글. 단 하나의 인스턴스를 생성한다.
싱글톤을 써야하는 이유는?
어플리케이션의 탄생부터 종료될 때 까지 변하지 않는 고정된 메모리영역을 얻으면서 동시에 단 한번만 new를 써서 인스턴스를 얻었기 때문에 메모리 낭비를 방지할 수있고, 메모리적으로 효율적이다.
또한 싱글톤으로 만들어진 인스턴스는 전역적으로 사용되기 때문에
다른 클래스의 인스턴스들이 데이터를 공유하고 변경할 수 있다.
싱글톤 패턴의 유의할 점
너무 싱글톤 인스턴스에게 많은 일을 위임하거나 너무 많은 데이터를 공유시킬 경우 싱글톤 인스턴스와 다른 클래스 인스턴스들 간에Coupling이 많아지고 결합도가 높아져 개방폐쇄원칙에 위배된다. 때문에 너무 남발하지 말자....
멀티스레드환경에서 Data 동기화문제가 발생할 수 있으므로, synchronized 키워드를 사용해서 방지할 수 있다.
(아래 싱글톤 예제를 확장한 다양한 싱글톤 버전은 추후 스크랩할 예정이다.)
주로 안드로이드 개발을 실무에서 했기 때문에 예제로 안드로이드 싱글톤 코드를 첨부했습니다.
public class DataManager {
private static DataManager instance = null;
private Activity activity;
private DataManager(){
//생성자앞에 private으로 선언하면서,
//다른 클래스에서 new 키워드를 사용하여 인스턴스를 만들 수 있는 여지를 막음.
}
public static DataManager getInstance(){
if(instance == null){
instance = new DataManager();
}
return instance;
}
public Activity getActivity() {
return activity;
}
public void setActivity(Activity activity) {
this.activity = activity;
}
}
위 싱글톤 예제에서 주목할 점은 Activity 를 얻어오는 점이다.
그 이유는 싱글톤 클래스의 인스턴스를 생성한 Activity의 생명주기에 따라 영향을 받을 수 있게 하기 위해서다.
만약 Activity 생명주기에 영향을 받지 않게 하기 위해선 Application 레벨의 Context를 받는 것으로 대체할 수 있다.
Application 레벨의 Context를 만약 받게되면, 하나의 어플리케이션 생명주기에 영향을 받게된다.
나는 Activity의 생명주기와 관련하여 싱글톤을 써야했기 때문에 위와 같이 Activity를 받았지만,
각자 개발자 의도에 맞게 커스터마이징 해서 사용하면된다.
http://stevenjsmin.tistory.com/107
'프로그래밍 > Design_Pattern' 카테고리의 다른 글
| [Design_Pattern] 템플릿 메서드 패턴(Template Method Pattern) (3) | 2017.08.27 |
|---|---|
| [Design_Pattern] 데코레이터 패턴(Decorator Pattern) (1) | 2017.08.25 |
| [Design_Pattern] 프록시 패턴(Proxy Pattern) (4) | 2017.08.25 |
| [Design_Pattern] 어댑터 패턴(Adapter Pattern) (1) | 2017.08.25 |
| [Design_Pattern] Singleton(싱글톤)의 고도화 (2) | 2017.07.27 |