Contents

Static Class vs Singleton

가끔 개발을 하다 보면 싱글턴 패턴과 정적 클래스가 헷갈릴 때가 있다.

두 방식 모두 하나의 객체를 다루는 것 같은데, 구체적으로는 어떻게 다를까?

https://stackoverflow.com/questions/519520/difference-between-static-class-and-singleton-pattern

thread safe?

싱글턴 패턴과 정적 클래스를 쓰레드 세이프 한 지 여부로 구분할 수 있을까?

싱글턴 패턴과 정적 클래스는 둘 다 쓰레드 세이프 하게 구현되어야 한다. 이는 구현하기에 따라 다르기 때문에, 쓰레드 세이프한지 아닌지는 둘을 구분지을 수 없다.

interface implementation?

  • 싱글턴 패턴은 인터페이스를 구현할 수 있다.
    • 싱글턴 패턴을 사용하면 기본 클래스로부터 상속을 받아 싱글턴 객체를 또 다른 구현체인 것처럼 사용할 수 있다.

정적 메서드?

싱글턴 패턴은 생성된 하나의 인스턴스에 접근하는 방법을 제공하는 개념이다.

  • 이 인스턴스는 다른 메서드에 파라미터로 전달될 수 있다.
  • 전달된 인스턴스는 다른 평범한 객체처럼 사용될 수 있다.

반면 정적 클래스는 오직 정적 메서드만을 사용한다.

상태의 유무?

정적 클래스는 보통 유틸리티 클래스로 많이 사용한다.

그리고 이러한 유틸리티 클래스는 내부에 상태를 유지하지 않도록 구현한다. 함수의 기능적인 측면만 수행한다면 정적 클래스 안에 어떠한 상태는 존재하지 않게 된다.

반면 싱글턴 객체 내부에는 상태가 존재한다.

  • 싱글턴 클래스의 인스턴스는 정적 클래스보다 더 유연하게 상태를 관리할 수 있다.
  • 때문에 인터페이스를 구현할 수 있고, 다른 클래스를 상속할수 있으며 다른 객체가 또 다시 싱글턴 객체를 상속받을 수도 있다.

정리하자면..

기능적인 측면만 수행하는 함수들을 모아 놓기를 원한다면, 정적 클래스를 사용하는 것이 방법이다.

만약 어떤 리소스에 대해 단일 접근만 허용되어야 한다면, 싱글턴 패턴을 사용하는 것이 방법이다.