[스탠다드 3주차 강의 내용 중 일부]
// 싱글톤 구현 -> "추후 DI를 이용하면 이렇게 작성하지 않아도 된다."
class DataSource {
companion object {
private var INSTANCE: DataSource? = null
fun getDataSource() : DataSource {
// synchronized는 동기화 블록으로 한 번에 하나의 스레드만 접근할 수 있게 한다.
// -> 다중 스레드 상황에서 여러 Instance가 생성되지 않도록 단일 객체(싱글톤)을 보장하는 역할이다.
// 쓰레드는 'DataSource::class'에 대한 Lock을 획득한 뒤, 내부로 진입할 수 있음
return synchronized(DataSource::class) {
val newInstance = INSTANCE ?: DataSource() // 객체가 있다면 대입. 없다면 생성해서 대입
if (INSTANCE == null) {
INSTANCE = newInstance
}
newInstance
}
}
}
fun getFlowerList(): List<Flower> {
return flowerList() // 더미데이터
}
}