객체를 생성할때 하나만 생성하게끔 막는 방법은 없나요?

조회수 4128회

객체를 생성할때 하나만 생성하게끔 막는 방법은 없나요? 예를 들어서 세상에 저라는 사람은 딱 한명이잖아요. 그래서 저를 인스턴스화 시킨다면 딱 한명이니까 두개 이상 객체화를 못시키게 막고싶은데 어떻게 할 수 있을까요?

1 답변

  • 좋아요

    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는 절대 생성되지 않습니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)