📢 Object 란 무엇인가?
→ 생성자 없이 객체를 직접 만들어 내는것📢 Object 사용 이유?
→ 기존 Class는 인스턴스를 만들기 위한 틀이다. Class는 내부 속성, 함수를 사용하려면 생성자를 통해 인스턴스 객체 만든다. 하지만 Object는 1개의 객체로 공통적인 속성, 함수를 사용하기 위해 사용한다. **= Singleton Pattern📢 Singleton Pattern은 무엇인가?
→ 싱글톤 패턴이란 클래스의 인스턴스를 단 하나만 만들어 사용하도록 하는 코딩 아키텍쳐 패턴
📢 Object Expressions?
→ 자바의 익명 클래스의 한계를 개선한 버전. 코틀린의 Object는 자바와 다르게 아무것도 상속받지 않을 수 있다. ⇒ Any를 상속받은 익명 클래스 라는 말과 같다.📢 자바와 다른점?
1. 아무것도 상속하지 않는 Any를 상속한 익명 클래스를 만들 수 있다.
2. 클래스 상속과 여러 인터페이스 구현 가능
3. 익명 객체가 익명 클래스 타입변수에 담길 수 있다.*Object Expressions : 객체 표현식
interface DownloadListener { // DownloadListener 인터페이스
fun onDownloadStarted() // 다운로드 시작
fun onDownloadCompleted(file: String) // '파일' 다운로드 완료
fun onProgressUpdate(progress: Int) // 진행도
}
class Downloader {
var downloadListener: DownloadListener? = null
fun downloadFile(file: String) {
downloadListener?.onDownloadStarted() // 다운로드 시작 안내
for(i in 1..10) { // 진행도를 알려주는 for 문
Thread.sleep(600)
downloadListener?.onProgressUpdate(i * 10)
}
downloadListener?.onDownloadCompleted(file) // 다운로드 완료 안내
}
}
class App: DownloadListener {
override fun onDownloadStarted() {
println("다운로드 시작...")
}
override fun onDownloadCompleted(file: String) {
println("$file 다운로드 완료.")
}
override fun onProgressUpdate(progress: Int) {
println("$progress% 다운로드")
}
}
fun main() {
val downloadListener = App()
val downloader = Downloader()
downloader.downloadListener = downloadListener
downloader.downloadFile("뇽뇽이의 오후.mp4")
}
interface DownloadListener { // DownloadListener 인터페이스
fun onDownloadStarted() // 다운로드 시작
fun onDownloadCompleted(file: String) // '파일' 다운로드 완료
fun onProgressUpdate(progress: Int) // 진행도
}
class Downloader {
var downloadListener: DownloadListener? = null
fun downloadFile(file: String) {
downloadListener?.onDownloadStarted() // 다운로드 시작 안내
for(i in 1..10) { // 진행도를 알려주는 for 문
Thread.sleep(600)
downloadListener?.onProgressUpdate(i * 10)
}
downloadListener?.onDownloadCompleted(file) // 다운로드 완료 안내
}
}
/*class App: DownloadListener {
override fun onDownloadStarted() {
println("다운로드 시작...")
}
override fun onDownloadCompleted(file: String) {
println("$file 다운로드 완료.")
}
override fun onProgressUpdate(progress: Int) {
println("$progress% 다운로드")
}
}*/
fun main() {
val downloader = Downloader()
downloader.downloadListener = object: DownloadListener { // Object Expressions 활용
override fun onDownloadStarted() {
println("다운로드 시작...")
}
override fun onDownloadCompleted(file: String) {
println("$file 다운로드 완료.")
}
override fun onProgressUpdate(progress: Int) {
println("$progress% 다운로드")
}
}
downloader.downloadFile("뇽뇽이의 오후.mp4")
}
✅ 코틀린의 다른것이 궁금할땐 아래 링크 확인
@evergreen_tree