상위 패키지에 있는 싱글톤을 호출할려면 어떻게 해야 하나요?
앨버트
package com - 여기에 A.java가 Singleton으로 되어 있습니다.
그리고
package com.util 에서 A를 호출할려고 하는데..
A에서 초기화 함수로 사용한 getInstance()가 호출이 않되네요.. 문론 import com.* 또는 import com.A 라고 import도 시켰습니다.
상위에 있는 다른 평범한 함수들은 new로 초기화가 되는데 Singleton만 초기화 함수가 호출이 않되네요.. 왜 그런건가요??
소스의 일부분을 올립니다..
==============================================================
== A Class (클래스 명은 가칭임)
==============================================================
package com;
//Singleton 초기화 선언부분
private Singleton(){}
static Singleton getInstance()
{
Singleton instance = (Singleton)(perThreadInstance.get());
if (instance == null)
{
synchronized(lock)
{
instance = theInstance;
if (instance == null)
instance = theInstance = new Singleton();
if (ConnectionMap == null)
ConnectionMap = new HashMap();
if (ClientIdMap == null)
ClientIdMap = new HashMap();
}
perThreadInstance.set(instance);
}
return instance;
}
=====================================================
== 하위 패키지 클래스
=====================================================
package com.util;
...
...
import com.*;
..
생성자 함수
{
// 여기서 위의 Singleton함수를 초기화 할려고 하는데 되지를 않네요..
}
-
눈내리던날
깡통// 옷.. 감사합니다..
-
소희
추억/참고로 말씀드리면.. protect 라는 접근지정자는 없고, public, private, protected, (friendly) 로 4가지가 존재합니다. 마지막의 경우 동일 패키지 내에서 접근이 가능하고, 일반적으로 factory 를 사용하거나 interface 를 통한 접근을 강제하고자 할때 많이 사용됩니다.. (구상클래스 은닉.. 이라고 하믄 될런지)
-
아라
유메// 네.. 그래야 겠어요.. ㅠ.ㅠ public, private, protect, protected 만 있는줄 알았는데..
-
찬바리
직접 명시하지않으면 default로 인식합니다. default는 명시할 경우 에러가 나게되고요.
접근지정자에 대해서 좀더 알아보셔야 하지 싶네요. -
내꼬야
아.. 아무것도 않쓰면 자동으로 public이 되는 줄 알았는데.. 그게 아니였군요.. 감사합니다..
-
예린
getInstance() 함수는 public 으로 주셔야죠.아무것도 안 쓰시면 default 로써 자신이 포함된 패키지 내에서만 참조할 수 있습니다. 같은 패키지 영역이 아니므로 public 으로 주시면 됩니다.