C#/TIL(Today I Learned)

2025-05-06 <클래스를 전역에서 접근하고 싶을 때>

프린스 알리 2025. 5. 6.

전역 접근을 위한 두 가지 방법: 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

댓글