객체를 생성할때 하나만 생성하게끔 막는 방법은 없나요?
조회수 4128회
객체를 생성할때 하나만 생성하게끔 막는 방법은 없나요? 예를 들어서 세상에 저라는 사람은 딱 한명이잖아요. 그래서 저를 인스턴스화 시킨다면 딱 한명이니까 두개 이상 객체화를 못시키게 막고싶은데 어떻게 할 수 있을까요?
1 답변
-
싱글톤 패턴을 활용하시면 됩니다. 싱글톤(singleton)이란 하나의 인스턴스만 생성되는 클래스입니다. 구현 방법은 생성자를 private으로 하고 인스턴스에 접근할 수 있게 멤버들을 public static으로 제공합니다. 예를 들어
public class Elvis{ public static final Elvis INSTANCE = new Elvis(); private Elvis(){....} public void leaveTheBuilding(){....} }
이런 식으로 private 생성자는 딱 한번만 호출되어 public static final필드인 Elvis.INSTANCE를 초기화한다. public 이나 protected 생성자가 없으므로, 한 명의 엘비스만 존재하는 세계를 보장합니다.
두 번째 방법으로는 static 팩토리 메소드를 public 멤버로 두는 건데요.
public class Elvis{ private static final Elvis INSTANCE = new Elvis(); private Elvis(){....} public static Elvis getInstance(){ return INSTANCE;} public void leaveTheBuilding(){....} }
이런 식으로 몇번 호출되든 Elvis.getInstance에서는 항상 같은 객체를 반환하고 또다른 Elvis는 절대 생성되지 않습니다.
댓글 입력