2016-06-02 2 views
2

일반적으로 Singleton 클래스의 인스턴스 변수는 비공개로 유지됩니다. 그러나 비공개로 유지하는 것이 가능합니까? 우리는 다음과 같이 인스턴스를 선언하는 경우 : - 비공개 instanceName을 사용하여 Singleton 클래스를 만들 수 있습니까?

final static SingletonClass singletonInstance= new SingletonClass(); 

이 유효한 싱글 클래스 인 클래스에 대한 어떤 문제가 발생할 것인가?

+0

여기에 두 가지 질문을하고 있습니다. 비공개 instanceName을 사용하여 싱글 톤 클래스를 만들 수 있으며 싱글 톤 클래스의 두 번째 객체를 만들면 어떻게 될까요? 옳은? –

+0

아니요. 두 번째 질문은, 최종 인스턴스 올바른 사용 내 접근 방식은 무엇입니까? @blahfunk – shanti

답변

1

singleton pattern은 주어진 시간에 시스템의 해당 클래스의 단일 인스턴스임을 보장합니다. 패턴이 공개/비공개에 대해 아무 것도 말하지 않습니다.

하나의 인스턴스 만 사용할 수있는 한 구현이 다를 수 있습니다.

모든 생성자가 비공개이고 나머지 클래스가이 SingletonClass.singletonInstance과 같은 싱글 톤에 액세스하면 싱글 톤 패턴이 충족됩니다.

+0

고마워, 그게 더 나은 대답 이네. – shanti

0

표시되는 유일한 차이점은 JVM 자체 처리 방법에 따라 다릅니다. 이렇게하면 클래스가 액세스되기 전에 클래스가 할당 될 가능성이 있습니다. 현재 또는 지금까지는 사실이 아니지만 언어 구현에 대한 종속성을 생성하는 반면 고전적인 접근 방식은 첫 번째 클래스 방문객.

EDIT1 :

기술적으로, 여전히있을 것이다 유효한 싱글 톤 클래스는 JVM은 액세스 시나리오에서 스레드 안전을 보장 한한다. 당신이 생성을 동기화 할 수있는 방법이 없기 때문에이 접근 방식을 피해야합니다. 단 하나의 인스턴스 만 위반하면됩니다.

+0

예 또는 아니요? 최종 인스턴스를 올바른 솔루션으로 만들고 있습니까? – shanti

+0

내 편집보기 @shanti –

+0

수정 자 접근은 스레드 안전을 그림에 어떻게 반영합니까? 우리는 Constructor 나 Singleton 클래스의 getInstance 메서드에 집중하여 항상이 부분을 처리 할 수 ​​있습니다. 그렇지 않니? – shanti

1

우리는 인스턴스 변수를 완전하게 제어하기를 원하기 때문에 인스턴스 변수를 private로 설정합니다 (사용자가 최종적이고 정적으로 만들고 있기 때문에 어느 것이나 사용하기 전에 값을 가지며 나중에 변경할 수 없습니다).

그러나에 대한 몇 가지 포인트가 있습니다 : 변수가 개인 및 정적하지

1) 경우 어딘가에 우리가 (게으른 로딩)을 사용할 때까지 보통 싱글 설계 변수를 초기화하지 않습니다는.

2) 최대한 많이 변수/기능의 범위를 최소화해야합니다. 다른 사람이 직접 변경하지 못하도록하려면 (더 나은 디자인)

볼 수있는 점은 스레드 안전성에 대해 걱정할 필요가 없다는 점입니다 (일반적인 싱글 톤에서는주의해야합니다. 다중 스레드 응용 프로그램을 가지고있는 경우)

+0

네, 저도 그 점을 놓쳤습니다! 마지막으로 스레드 안전 부분에 대해 걱정할 필요가 없다는 것을 의미합니다. 큰! :) – shanti

관련 문제