반응형
싱글톤(Singleton) 패턴 이란?
- 싱글톤 패턴이란 클래스가 최초 인스턴스화 할때에 한번만 메모리에 객체를 생성하고 이 객체를 사용하는 디자인 패턴이다. 즉 클래스를 여러번 인스턴스화 하더라도 새로운 객체를 생성하는것이 아닌 기존의 객체를 공유한다.
싱글톤(Singleton) 사용 이유?
- 위에 설명한것과 같이 한번만 객체를 생성하기 때문에 메모리 낭비를 방지할 수 있다. 또한 한번만 생성된 객체는 전역성을 띄기 때문에 공유가 용의하다.
싱글톤(Singleton) 문제
- 싱글톤의 전역성은 장점인 동시에 단점으로 작용된다. 몇가지 케이스에서는 객체를 공유한다는것이 큰 장점으로 작용하지만 다른 객체관의 결합도가 높아져 객체 지향 설계 원칙에 어긋난다. 또한 사이드 이팩트, 멀티 쓰래드 환경에서 동기화 처리 문제등이 발생한다.
싱글톤(Singleton) 구현
- 아래의 클래스를 보면 private static으로 instance가 초기화 되어있다 이처럼 전역(static)으로 생성하였기 때문에 인스턴스화 하지 않고 사용할 수 있지만 private로 되어있어 직접적인 접근이 불가능 하다. 따라서 getInstance()를 이용해 접근해야 한다. 함수의 내용을 살펴보면 최초 실행시에만 인스턴스화를 진행하고 아닐경우 이전에 생성한 객체를 사용한다.
- count 변수화 관련 함수는 아래에 싱글톤 예제를 위해 생성한 것이니 무시해도 좋다.
SingletonExample.java
public class SingletonExample{
private static SingletonExample instance = null;
private int count = 0;
public static SingletonExample getInstance(){
if(instance == null){
instance = new SingletonExample();
}
return instance;
}
public void count(){
this.count++;
}
public int getCount(){
return this.count;
}
}
- 위에 싱들톤 함수를 이용해 간단한 예제를 만들어 보겠다.
- 결과는 3이 나온다.
public class Example{
public static void main (String[] args){
SingletonExample sg_1 = SingletonExample.getInstance();
sg_1.count();
SingletonExample sg_2 = SingletonExample.getInstance();
sg_2.count();
SingletonExample sg_3 = SingletonExample.getInstance();
sg_3.count();
System.out.println(sg_1.getCount());
}
}
반응형
'알고리즘' 카테고리의 다른 글
[백준] 스택수열_1874번 (0) | 2022.05.24 |
---|---|
[백준] 단어정렬_1181번 (0) | 2022.05.23 |
[계수정렬]선형시간 정렬 알고리즘 (0) | 2021.08.14 |
퀵 정렬 (Quicksort) (0) | 2021.08.13 |
컴퓨터 알고리즘(힙 정렬) (0) | 2021.08.12 |