JavaScript 에서도 위 패턴이 적용될 수 있는지 말해보시오.
클래스의 오브젝트 (객체) 혹은 인스턴스가 하나만 생성되도록 강제하는
프로그래밍 패턴이다.
기본적으로 생성자는 private 으로 감춘다.
그리고 자기 자신을 참조하는 멤버 변수를 또한 private 멤버 변수로 가지고 있는다.
그리고, public static getInstance() 함수를 둬서 필요한 곳에서 해당 인스턴스를
사용할 수 있게 한다.
Thead safe하게 만드는게 관건인데,
아예 class loading 할때, 만들어 버리는 방법이 하나 있다.
private static MyObj myobj= new MyObj();
이렇게 멤버 변수에 아예 할당해 버리기.
이렇게 말고 lazy 하게 요청이 들어왔을 때 인스턴스화하고 싶다면
if (myobj == null) {
synchronized(A.class) {
if (myobj == null) {
myobj = new MyObj();
}
}
}
이렇게 해서 설령 처음 if문을 2개 이상의 쓰레드가 동시에 들어왔어도
동기화된 블록에는 하나씩 들어가므로,
제일 먼저 동기화된 블록에 들어간 애만 생성을 하고 나머지 애들이 중복해서 생성하는
문제를 방지할 수 있다.
댓글 없음:
댓글 쓰기