일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Android ViewPager2
- 습관만들기
- DataBinding
- 66챌린지
- Android ProgressBar
- Android 12 대응
- Android 12
- Java
- OkHttp Interceptor
- Android DataBinding
- 프로그래머스 알고리즘
- 알고리즘 자바
- Kotlin FCM
- WebView
- Kotlin
- Android Interceptor
- scope function
- Android
- 카카오 알고리즘
- 안드로이드 갤러리 접근
- 영어독립365
- Android Navigation
- 영어공부
- 안드로이드
- 안드로이드 fcm
- android recyclerview
- Android WebView
- MVP Architecture
- Android Jetpack
- 안드로이드 카카오 로그인
- Today
- Total
Developer Geek
Singleton Class in Kotlin 본문
개요
앱에서 딱 한번만 생성되고 전역에서 사용할 객체가 필요하다면 우린 Singleton Pattern을 사용하면 된다.Singleton Pattern
은 해당 클래스에서 오직 하나의 객체만을 사용하도록 제한하는 것이다.
그래서 Singleton Pattern
을 구현하기 위해서는 Singleton Class을 먼저 만들어야 한다.
이번 글에서는 Kotlin을 이용해 Singleton Class 만드는 법을 알아 보도록 한다.
Singleton Class
Singleton Class 는 오직 하나의 객체만이 생성되고 어디서나 사용될 수 있는 클래스이다.
NetworkService, DatabaseService 등 오직 하나의 객체만 필요한 경우에 사용된다.
Singleton Class가 사용되는 이유는 일반적으로 객체를 생성하면 시스템 리소스가 객체가 생성되는 만큼 사용되기 때문이다. 그래서 각각의 객체를 생성해 리소스를 사용하기보다는 하나의 객체를 생성해 필요할 때마다 객체를 생성하지 않고 같은 객체를 사용하는 것이다.
Properties of Singleton Class
Singleton Class는 일반적으로 아래와 같은 특징을 갖는다.
- Only one instance: Singleton Class는 해당 클래스에 하나의 객체만을 제공한다. 또한
outer classes
나subclasses
에서 해당 객체 생성을 막는다. - Globally accessible: Singleton 객체는 전역에서 접근하여 사용할 수 있다.
Rules for making a class Singleton
- A private constructor
- A static reference of its class
- One static method
- Globally accessible object reference
- Consistency across multiple threads
Singletone Example in Java
public class Singleton{
private static Singleton instance = null;
private Singletone(){
}
public static Singleton getInstance(){
if (instance == null){
synchronized(Singleton.class){
if (instance == null){
instance = new Singleton();
}
}
}
return instance;
}
}
쓰레드 간의 간섭이 업도록 인스턴스를 만들 때는 synchronized
키워드를 사용한다.
Singleton Example in Kotlin
Kotlin 코드도 같다. 아래는 Singleton class 코드 예제이다.
object Singleton
이 다음에는 어떻게 해야할까?
터무니 없겠지만, 위 코드 그대로다. 너무 간단하지 않는가?
좀 더 상세한 예시를 설명하도록 하겠다.
코틀린에서 Singleton Class를 구현하기 위해서는 object
키워드를 사용해야한다. object
클래스는 function
, properties
그리고 init
함수를 갖을 수 있다.
생성자는 object
에서 필요가 없는데, 만약 몇몇 초기화가 필요한 작업이 있다면init
함수를 대신 사용하면 된다.
그리하여 객체가 처음 생성될 때, init
함수가 동작하여 초기화 작업을 수행한다.
아래 코드는 코틀린을 이용한 Singleton Class 이다.
object Singleton {
init{
println("Singleton class invoked.")
}
var variableName = "I am Var"
fun printVarName(){
println(variableName)
}
}
fun main(args: Array<String>){
Singleton.printVarName()
Singleton.variableName = "New Name"
var a = A()
}
class A{
init{
println("Class init method. Singleton variableName property : ${Singleton.variableName}")
Singleton.printVarName()
}
}
Output
Singleton class invoked.
I am Var
Class init method. Singleton variableName property : New Name
New Name
'안드로이드 > Pattern' 카테고리의 다른 글
[Android] MVP Basic Sample in Kotlin (0) | 2022.08.27 |
---|---|
[Android] MVP Architecture (1) | 2022.08.26 |
Builder Pattern 이란 (0) | 2022.06.12 |
MVVM 이란 (0) | 2022.06.11 |