
전역 접근을 위한 두 가지 방법: Static vs Singleton
어플리케이션에서 전역적으로 접근 가능한 기능이나 데이터를 다루고 싶을 때 흔히 두 가지 방법이 고려된다.
바로 static 클래스/멤버를 사용하는 방식과 **싱글톤 패턴(Singleton Pattern)**을 적용하는 방식이다.
둘 다 인스턴스를 여러 번 생성하지 않고 전역에서 접근할 수 있다는 점은 같지만, 실제로는 성격이 매우 다르다.
1. Static의 특징
정의
static은 클래스나 그 멤버가 인스턴스화되지 않고도 접근 가능하도록 만드는 키워드다.
즉, 메모리 상에 단 한 번 로드되며, 클래스 자체가 곧 인스턴스 역할을 한다.
특징 요약
- 인스턴스 없이 사용 가능: 객체 생성 없이
클래스명.메서드()형태로 접근 가능하다. - 상속 불가: static 클래스는 C#에서 아예 상속 자체가 불가능하다.
- 상태 유지가 어렵다: static 필드는 상태를 저장할 수 있지만, 의도하지 않은 공유 상태로 인해 예측하기 어려운 버그를 유발할 수 있다.
- 의존성 주입(DI)이 불가능: static 클래스는 인터페이스를 구현하거나 주입받는 구조를 적용하기 어렵다.
사용에 적합한 경우
- 상태를 가지지 않는 유틸리티 함수 집합 (예:
Math,Utils,Logger) - 단순 도구 역할만 하는 경우
2. Singleton의 특징
정의
싱글톤 패턴은 프로그램 실행 중 오직 하나의 인스턴스만 존재하도록 보장하는 설계 패턴이다.
주로 private 생성자 + static 인스턴스 필드 조합으로 구현된다.
특징 요약
- 단일 인스턴스 보장: 객체가 하나만 생성되도록 통제한다.
- 상태 관리가 가능: 인스턴스 기반으로 상태를 안전하게 보존할 수 있다.
- 인터페이스 구현 가능: 다른 클래스들과 유연하게 협업이 가능하다.
- 상속 및 다형성 지원: 객체지향 설계를 유지하면서 전역 접근을 할 수 있다.
- 의존성 주입 가능: 테스트 및 모듈화가 용이하다.
사용에 적합한 경우
- 공유 상태(설정, 리소스 관리자 등)를 안전하게 유지해야 하는 경우
- 전역 접근이 필요하지만, 유연한 설계를 포기하고 싶지 않을 때
- 테스트나 인터페이스 기반 설계를 염두에 둘 때
'C# > TIL(Today I Learned)' 카테고리의 다른 글
| 2025-04-26 <Action과 Func와 람다 함수> (0) | 2025.04.26 |
|---|---|
| 2025-04-26 <형변환> (0) | 2025.04.26 |
| 2025-04-24 <박싱과 언박싱> (0) | 2025.04.24 |
| 2025-04-23 <const와 readonly> (0) | 2025.04.23 |
| 2025-04-19 <ArraySegment> (0) | 2025.04.19 |
댓글