ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [디자인 패턴] 싱글톤 패턴(Singleton Pattern)
    Design Pattern 2020. 11. 12. 00:18

    싱글턴 패턴이란 이름에서도 유추할 수 있듯이

    어떠한 객체를 생성해서 사용하는데 어떤 곳에서든 같은 객체를 사용할 수 있어야 하는 상황에 주로 사용된다.

    예를 들어 프린터 등의 주변기기와의 인터페이스를 담당하는 클래스 또는

    데이터베이스에 접근하는 클래스와 같은 것이 그 예가 될 수 있겠다.

     

    나는 이러한 싱글톤 패턴을 직접 실습해보고자 현재 개발중인 개인 어플리케이션에 적용해보도록 했다.

    나는 현재 MVP 패턴을 사용하고 있는데, 여기서 사용되는 모델이 데이터 저장과 인출을 맡고 있기 때문에,

    싱글톤 패턴을 적용하기에 딱 좋은 예가 될 수 있다고 생각했다.

    다음은 이를 그에 맞춰 구현한 모델 코드다.

    package com.lilac.lilacstory.Common.Model;
    
    import android.content.SharedPreferences;
    import android.provider.ContactsContract;
    
    import java.util.HashMap;
    import java.util.Map;
    
    public class DataModel implements DataRepository {
        private Map<String,String> repo = new HashMap<>();
        private static DataRepository dataRepository = new DataModel();
        private DataModel(){}
    
        public static DataRepository getInstance()
        {
            return dataRepository;
        }
    
        @Override
        public String LoadInfo(String key) {
            return repo.get(key);
        }
    
        @Override
        public void SaveInfo(String key,String value) {
            repo.put(key,value);
        }
    }

    싱글톤 패턴을 구현하는 데에는 다음과 같은 과정이 필요하다.

    1.생성자를 private로 만들어서 외부로의 접근을 막을 것.

    2.클래스 스스로의 정적 객체를 만들어 어떤 곳에서든 동일한 객체에 접근할 수 있도록 할 것.

    3.getInstance() 메소드로만 해당 객체에 접근할 수 있도록 할 것.

     

    다음과 같은 조건을 만족하도록 클래스를 구현하면, 어떤 곳에서든 동일한 객체에 접근하게 되어 

    굳이 여러 개의 객체를 다수 생성할 필요 없이 하나의 객체로만 사용할 수 있다.

    이렇게 정의된 싱글톤 클래스는 다음과 같은 방식으로 호출된다.

    public class RegisterPresenter implements Contract.Presenter {
        Contract.View view_Register;
        DataModel repository;
    
        public RegisterPresenter(Contract.View view)
        {
            view_Register = view;
            repository = (DataModel) DataModel.getInstance();
        }
        ....
        ...

    DataModel 인터페이스에 getInstance 정적 메소드를 호출하여, 해당 객체를 반환받아 대입하는 것을 확인할 수 있다.

    'Design Pattern' 카테고리의 다른 글

    [디자인 패턴] Android MVP 디자인 패턴  (0) 2020.11.11
Designed by Tistory.