Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Tostring 사용법
- AddRange
- List 찾기
- list
- 기본 게이트웨이
- C# Find
- c# list
- C++
- Parse 사용법
- C# Contains
- List 정렬
- list 사용법
- Visual Studio
- List 제거
- InsertRange
- BFS
- 백준
- 네트워크
- 서브넷 마스크
- TCP/IP
- OSI 3계층
- c#
- List 추가
- 호스트
- 알고리즘
- 호스트 주소
- IP주소
- DP
- 서브넷
- 네트워크 용어
Archives
- Today
- Total
CodeLabs
싱글톤(Singleton) 패턴 본문
싱글톤 패턴
정의는 단순하다.
싱글톤 인스턴스를 오직 하나만 생성해서 사용한다.
사용법과 문제점을 알아보자.
public class Singleton
{
private static Singleton instance;
private Singleton() { }
public static Singleton GetInstance()
{
if(instance == null)
instance = new Singleton();
return instance;
}
public void print()
{
Console.WriteLine("싱글톤 호출");
}
}
public class Program
{
static void Main(string[] args)
{
Singleton.GetInstance().print();
}
}
유의사항
오직 하나의 인스턴스만을 생성해서 사용한다는 메모리 측면의 장점과 더불어 전역으로 설정되어 다른 클래스에서의 접근성이 높지만 여러곳에서 해당 인스턴스에 접근할 경우 동시성의 오류가 발생할 수 있음에 유의해야한다.
문제점
싱글톤 인스턴스의 경우 자원이 공유되어 있기 때문에 테스트를 하기 위해서는 매번 해당 인스턴스를 초기화 해주어야 하는 번거로움이 있다.
두 번째로는 앞서 말한 멀티스레딩 환경에서의 동시성 문제가 발생할 수 있다. 여러 스레드에서 해당 인스턴스에 접근할 경우 충돌이 발생하거나 예기치못한 오류가 발생할수 있다.
세 번째로는 싱글톤 인스턴스에 크게 의존하는 코드의 경우 싱글톤을 변경하거나 교체할 경우 광범위한 오류를 발생시킬 수 있다. 이는 코드의 유연성을 저하시키고 SOLID 원칙의 OCP와 DIP를 위배하게 된다.
네 번째로는 A 싱글톤이 B 싱글톤에 의존하는 경우 B 싱글톤이 A 싱글톤에 종속되는 순환 종속성에 빠질 수 있기 때문에 주의깊게 관리해야 한다.
다섯 번째로는 싱글톤은 전역이기 때문에 프로그램이 시작될 때 생성되서 끝날 때 사라진다. 필요없는 경우에도 메모리에 남아서 자원을 사용하기 때문에 싱글톤이 다수 생성될 경우 메모리측면에서 낭비될 수 있다.
결론
싱글톤을 구현하기에 따라서 SRP를 위배하는 경우도 생기기 때문에 위에 나오는 유의사항과 문제점을 잘 파악해서 사용해야한다.