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