[design-patterns] 정적 클래스와 싱글 톤 패턴의 차이점은 무엇입니까?

정적 클래스와 싱글 톤 패턴 사이에 실제 (실제) 차이는 무엇입니까?

둘 다 인스턴스화없이 호출 할 수 있으며, 하나의 “인스턴스”만 제공하며 둘 다 스레드로부터 안전하지 않습니다. 다른 차이점이 있습니까?



답변

싱글 톤 또는 정적 메소드가 스레드로부터 안전하지 않다고 말하는 이유는 무엇입니까? 일반적으로 둘 다 스레드 안전하도록 구현 해야 합니다.

싱글 톤과 여러 정적 메소드의 가장 큰 차이점은 싱글 톤이 인터페이스를 구현할 수 있다는 것입니다 (또는 내 경험상 일반적이지 않지만 유용한 기본 클래스에서 파생 될 수 있음). “구현.


답변

정답은 Jon Skeet의 다른 포럼 입니다.

싱글 톤은 생성 된 단일 인스턴스에 대한 액세스를 허용합니다. 해당 인스턴스 (또는 인스턴스에 대한 참조)는 다른 메소드에 매개 변수로 전달되어 일반 오브젝트로 처리 될 수 있습니다.

정적 클래스는 정적 메소드 만 허용합니다.


답변

  1. 싱글 톤 객체는 에 저장 되지만 정적 객체는 스택에 저장됩니다 .
  2. 우리는 할 수 있습니다 복제 싱글 객체를 (디자이너는 그것을 허용하지 않은 경우), 그러나 우리는 정적 클래스의 객체가 아닌 복제 할 수 있습니다.
  3. 싱글 톤 클래스는 OOP (객체 지향 원칙)를 따르지만 정적 클래스는 그렇지 않습니다.
  4. interfaceSingleton 클래스를 사용하여를 구현할 수 있지만 클래스의 정적 메서드 (예 : C # static class)는 구현할 수 없습니다.

답변

싱글 톤 패턴은 정적 클래스에 비해 몇 가지 장점이 있습니다. 첫째, 단일 클래스는 클래스를 확장하고 인터페이스를 구현할 수 있지만 정적 클래스는 클래스를 확장 할 수는 있지만 인스턴스 멤버를 상속하지는 않습니다. 정적 클래스는 일반적으로 처음로드 될 때 초기화되는 동안 단일 클래스를 느리게 또는 비동기 적으로 초기화 할 수 있으므로 잠재적 인 클래스 로더 문제가 발생할 수 있습니다. 그러나 가장 중요한 장점은 사용자가 인스턴스가 하나만 있다고 가정하지 않고도 싱글 톤을 다형성으로 처리 할 수 ​​있다는 것입니다.


답변

static클래스는 상태가 필요한 것은 아닙니다. 많은 기능들을 한꺼번에 Math(또는 Utils프로젝트에서) 묶는 데 유용합니다 . 클래스 이름은 함수를 찾을 수있는 단서를 제공합니다.

Singleton내가 가장 좋아하는 패턴이며 한 지점에서 무언가를 관리하는 데 사용합니다. static클래스 보다 유연 하고 상태를 유지할 수 있습니다. 인터페이스를 구현하고 다른 클래스에서 상속하고 상속을 허용 할 수 있습니다.

static와 사이에서 선택하는 규칙 singleton:

함께 유지해야 할 기능이 많으면 static선택이 있습니다. 일부 리소스에 대한 단일 액세스가 필요한 다른 것은로 구현 될 수 있습니다 singleton.


답변

정적 클래스 :-

  1. 정적 클래스의 인스턴스를 만들 수 없습니다.

  2. 클래스가 포함 된 프로그램 또는 네임 스페이스가로드 될 때 .NET Framework CLR (공용 언어 런타임)에 의해 자동으로로드됩니다.

  3. 정적 클래스는 생성자를 가질 수 없습니다.

  4. 정적 클래스를 메소드에 전달할 수 없습니다.

  5. C #에서 정적 클래스를 다른 정적 클래스로 상속 할 수 없습니다.

  6. 모든 정적 메서드가있는 클래스

  7. 더 나은 성능 (정적 메서드는 컴파일 타임에 결합됩니다)

하나씩 일어나는 것:-

  1. 객체의 한 인스턴스를 만들어 재사용 할 수 있습니다.

  2. 사용자가 처음 요청할 때 싱글 톤 인스턴스가 작성됩니다.

  3. 싱글 톤 클래스는 생성자를 가질 수 있습니다.

  4. 싱글 톤 클래스의 객체를 만들어 메소드에 전달할 수 있습니다.

  5. 싱글 톤 클래스는 상속의 제한을 말하지 않습니다.

  6. 정적 클래스가 아닌 싱글 톤 클래스의 객체를 처리 할 수 ​​있습니다.

  7. 메서드를 재정의 할 수 있습니다.

  8. 필요할 때 지연로드 될 수 있습니다 (정적 클래스는 항상로드 됨).

  9. 인터페이스를 구현할 수 있습니다 (정적 클래스는 인터페이스를 구현할 수 없음).


답변

정적 클래스는 더 나은 단어가 “함수”인 정적 메소드 만있는 클래스입니다. 정적 클래스로 구현 된 디자인 스타일은 순전히 절차 적입니다.

반면 싱글 톤은 OO 디자인에 특정한 패턴입니다. 그것은 전체 수명 동안 특정 역할의 인스턴스가 하나만 존재하도록 만드는 절차를 가진 (다형성과 같은 고유의 모든 가능성을 가진) 객체의 인스턴스입니다.