코틀린 Object -Part 1-

Ham's Velog·2022년 6월 21일
1
post-thumbnail

Object

📢 Object 란 무엇인가?
생성자 없이 객체를 직접 만들어 내는것

📢 Object 사용 이유?
→ 기존 Class는 인스턴스를 만들기 위한 틀이다. Class는 내부 속성, 함수를 사용하려면 생성자를 통해 인스턴스 객체 만든다. 하지만 Object는 1개의 객체로 공통적인 속성, 함수를 사용하기 위해 사용한다. **= Singleton Pattern

📢 Singleton Pattern은 무엇인가?
→ 싱글톤 패턴이란 클래스의 인스턴스를 단 하나만 만들어 사용하도록 하는 코딩 아키텍쳐 패턴


Object Expressions

📢 Object Expressions?
→ 자바의 익명 클래스의 한계를 개선한 버전. 코틀린의 Object는 자바와 다르게 아무것도 상속받지 않을 수 있다. ⇒ Any를 상속받은 익명 클래스 라는 말과 같다.

📢 자바와 다른점?
1. 아무것도 상속하지 않는 Any를 상속한 익명 클래스를 만들 수 있다.
2. 클래스 상속과 여러 인터페이스 구현 가능
3. 익명 객체가 익명 클래스 타입변수에 담길 수 있다.

*Object Expressions : 객체 표현식

예제 코드 1

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")
}

예제코드 2

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

profile
#안드로이드개발자

0개의 댓글