-
[디자인 패턴] 싱글톤 패턴(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