2021. 2. 17. 21:59ㆍ프로그래밍/디자인 패턴
📚 싱글턴 패턴이란?
- 클래스가 오직 하나만 생성되도록 하고 클래스 외부에서의 잘못된 접근을 없애는 방법.
- 이를 위해 클래스에 다음과 같은 제약을 준다.
1) 객체를 여러 곳에서 만들 수 없도록 한다.
2) 객체가 하나뿐이여야 한다.
🔔 싱글턴 패턴 사용하기
- 프로그램에서 프린터 객체를 사용해야한다.
- 한대 밖에 없는 자원으로 객체를 하나만 만들어서 재사용한다.
- 위의 제약사항을 참고하여 다음과 같이 구현할 수 있다.
1) 객체를 여러 곳에서 만들 수 없도록 생성자의 접근제한자를 private 으로 둔다.
private CPrinter()
2) 생성자 대신에 외부에서 객체를 쓸 수 있도록 하는 함수를 만든다.
public static CPrinter GetInstance()
외부에서 접근이 가능하도록 GetInstance() 함수의 접근제한자를 public 으로 두고,
외부에서 CPrinter클래스 객체를 생성할 수 없으므로 GetInstance() 함수를 static 함수로 만든다.
외부에서 사용할 때 다음과 같이 사용할 수 있다.
CPrinter.GetInstance()
3) CPrinter 클래스의 객체를 만들기 위해서는 CPrinter클래스의 생성자를 호출해야 한다.
그러기 위해서는 CPrinter 클래스의 객체 인스턴스를 만들어야 한다.
외부에서 CPrinter 객체에 접근할 수 있는 방법은 static함수인 GetInstance()뿐이고, static멤버 함수에서는 static변수밖에 접근하지 못한다.
따라서 다음과 같이 static 변수를 만든다.
private static CPrinter instance;
위의 3가지 코드를 취합해 다음과 같이 CPrinter 클래스를 만들 수 있다.
public class CPrinter
{
// 싱글턴 패턴
private CPrinter() { }
private static CPrinter instance;
public static CPrinter GetInstance()
{
if (instance == null) instance = new CPrinter();
return instance;
}
// 사용할 함수
public void TestPrinter()
{
// ...
}
}
// 외부에서 다음과 같이 사용
CPrinter.GetInstance();
CPrinter.GetInstance().TestPrint();
🐾 정리
- 싱글턴패턴은 시스템에 하나밖에 존재하지 않는 객체의 생성과 접근을 제어하기 위해 사용된다.
- 싱글턴이 가지는 가장 큰 책임은 함부로 접근되어서는 안되는 자원을 보호하는 것이다.
- 접근을 제어할 필요가 없는 자원을 싱글턴으로 작성하는 것은 쓸데 없이 객체 접근에 대한 부하만 높이는 꼴이 되니 잘 판단해서 사용해야한다.
- 싱글턴 객체는 어디서 생성됐는지, 또 누가 생성하는지 명확하지 않다는 것도 유의할 것!
※ 해당 포스팅은「패턴 그리고 객체지향적 코딩의 법칙(문우식 저)」책을 읽고 공부한 내용을 바탕으로 작성하였습니다.
'프로그래밍 > 디자인 패턴' 카테고리의 다른 글
[Design Pattern] 팩토리 패턴 (Factory Pattern) (0) | 2021.02.15 |
---|