Java에서 Parameter가 있는 Lazy Singleton

Java에서 Singleton에 대해서 수많은 구현들이 존재하고, 가장 최근에 본 멋진 녀석은 Java 8 Functional Programming: Lazy Instantiation 이었습니다.

다만, Android 개발자 입장에서 Singleton 초기화 시에 Context를 넘겨야 하는 경우가 많은데 Parameter 있는 Singleton의 경우 synchronized를 getInstance에 걸거나 안전하지 않은 double check locking을 쓸 수 밖에 없었습니다. Parameter 경우를 대응하고자 위의 예제를 조금만 고쳐서 다음과 같이 수정 해 보았습니다. (Project 구성 상 Lambda는 사용하지 않았습니다)

public class TestManager {

private static Function sProxy = new TestManagerHolder();

private final String arg;

private TestManager(String arg) {
this.arg = arg;
}

public static TestManager getInstance(String arg) {
return sProxy.apply(arg);
}

private static final class TestManagerHolder implements Function {

@Override
public synchronized TestManager apply(String s) {

class TestManagerFactory implements Function {

private final TestManager instance = new TestManager(s);

@Override
public TestManager apply(String s) {
return instance;
}
}

if (!TestManagerFactory.class.isInstance(sProxy)) {
sProxy = new TestManagerFactory();
}

return sProxy.apply(s);
}
}
}

코드를 보면 synchronized는 딱 한 곳에 사용되었는데, 처음 호출 후 초기화 된 다음에는 해당 블럭은 더 이상 사용되지 않습니다. 나중에 보면 간단한 코드인데 생각하지 못했네요.

Dagger 2 and MVP Architecture


Windows 10 크리에이터 업데이트 후 글자 사라짐 SW


Windows 10 크리에이터 버전 업데이트 후 저 문제를 당했습니다. 결론적으로 ActiveX를 모두 삭제 한 다음에 정상적으로 글자가 나오네요.

Windows 10은 이전의 Windows 7과는 다르게 ActiveX 때문에 제대로 동작하지 않는 경우가 많이 나오네요. 전혀 다른 이슈가 ActiveX 삭제로 해결 된 적이 있어서 혹시나 해 보았는데 다행입니다.


1 2 3 4 5 6 7 8 9 10 다음