Programming/Android
싱글톤(Singleton) 클래스
디빌리
2018. 8. 29. 07:06
싱글톤(Singleton) 이란?
싱글톤은 딱 하나의 인스턴스만 생성할 수 있는 클래스다. 때문에 싱글톤은 앱이 메모리에 있는 한 계속 존재한다.
이러한 특징으로 인해 데이터를 싱글톤으로 관리할 경우 앱의 생명주기동안 고유한 데이터 사용을 보장할 수 있다.
하지만 Android OS가 Application을 메모리에서 제거할 때 같이 소멸되기 때문에 장기간 데이터 보존을 위한 솔루션은 아니다.
(장기간 데이터 보존을 위한 솔루션으로는 SQLite, 서버 통신 등이 있다)
(장기간 데이터 보존을 위한 솔루션으로는 SQLite, 서버 통신 등이 있다)
싱글톤의 특징
- 자기 자신을 저장하기 위한 static object를 갖는다.
- private 생성자를 갖는다.
- 인스턴스 반환을 위한 get 메서드를 갖는다.
만약 자신의 인스턴스가 있다면 get 메서드를 통해 기존 인스턴스를 반환한고, 반대의 경우에는 생성자를 호출하여 새로운 인스턴스를 반환한다.
private static MySingleTone mSingleTone;
public MySingleTone get(Context context) {
if(mSingleTone == null) {
return new MySingleTone(context);
} else {
return mSingleTone
}
}
이러한 특징으로 인해 싱글톤은 메모리에 오직 하나의 인스턴스만 존재하게 된다.
싱글톤 예제
아래와 같이 학생 정보를 저장하는 Model Class인 Student가 있다고 가정하자.
public class Student { private UUID mId; private String mName; private String mGender; public Student(String name, String gender) { mName = name; mGender = gender; } public UUID getmId() { return mId; } public void setmId(UUID mId) { this.mId = mId; } public String getmName() { return mName; } public void setmName(String mName) { this.mName = mName; } public String getmGender() { return mGender; } public void setmGender(String mGender) { this.mGender = mGender; } }
이러한 데이터는 싱글톤을 통해 관리될 수 있다.
public class StudentLab { private static StudentLab sStudentLab; private List<Student> mStudents; public static StudentLab get(Context context) { if (sStudentLab == null) { return new StudentLab(context); } else { return sStudentLab; } } private StudentLab(Context context) { mStudents = new ArrayList<>(); } public List<Student> getStudents() { return mStudents; } }
위와같이 싱글톤을 통한 데이터 관리는 불필요한 메모리 낭비를 피할 뿐만 아니라 액티비티 생명주기 안에서 고유한 데이터 사용을 보장한다.
또한 싱글톤은 ListView 데이터를 관리할 때 유용하다.