Home [Kotlin] object ν‚€μ›Œλ“œ
Post
Cancel

[Kotlin] object ν‚€μ›Œλ“œ

πŸ“š [Kotlin] object ν‚€μ›Œλ“œ

  • object ν‚€μ›Œλ“œμ—λŠ” Object expression(객체 ν‘œν˜„μ‹)κ³Ό Object declaration(객체 μ„ μ–Έ) μ΄λΌλŠ” κ°œλ…μ΄ μ‘΄μž¬ν•œλ‹€.
  • 일뢀 클래슀λ₯Ό μ•½κ°„ μˆ˜μ •ν•œ 개체λ₯Ό λ§Œλ“€μ–΄μ•Όν•  λ•Œ μƒˆλ‘œμš΄ ν•˜μœ„ 클래슀λ₯Ό λ§Œλ“œλŠ” 것 보닀 λ‚«λ‹€κ³  νŒλ‹¨λ  λ•Œ μ‚¬μš©ν•  수 μžˆλ‹€.

🟒 Object expressions (객체 ν‘œν˜„μ‹)

  • 객체 ν‘œν˜„μ‹μ€ 이름이 μ •ν•΄μ§€μ§€ μ•Šμ€ 읡λͺ… 클래슀λ₯Ό λ§Œλ“€ λ•Œ μ‚¬μš©ν•œλ‹€.

    • 읡λͺ… ν΄λž˜μŠ€λž€ 이름이 μ •ν•΄μ§€μ§€ μ•Šμ•˜λ‹€λŠ” 뜻으둜 클래슀λͺ…이 μ—†λ‹€.

    • 읡λͺ… ν΄λž˜μŠ€μ΄λ―€λ‘œ 클래슀λ₯Ό 선언함과 λ™μ‹œμ— 객체가 μƒμ„±λœλ‹€.

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      
        val helloWorld = object {
            val hello = "Hello"
            val world = "World"
      
            override fun toString() = "$hello $world"
        }
      
        fun main() {
            println(helloWorld)
        }
      
    • μœ„ μ½”λ“œμ—μ„œ object λ‹€μŒμ˜ {λΆ€ν„° }κΉŒμ§€κ°€ 읡λͺ… ν΄λž˜μŠ€κ°€ λœλ‹€.

  • 이런 읡λͺ… ν΄λž˜μŠ€λ“€μ€ μΌνšŒμ„±μœΌλ‘œ μ‚¬μš©ν•  ν•„μš”κ°€ μžˆμ„ λ•Œ μœ μš©ν•˜λ‹€.

  • μ²˜μŒλΆ€ν„° 읡λͺ… 클래슀λ₯Ό κ΅¬ν˜„ν•˜κ±°λ‚˜ κΈ°μ‘΄ ν΄λž˜μŠ€λ‚˜ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 상속받아 κ΅¬ν˜„ν•  수 μžˆλ‹€.
    • μœ„ μ½”λ“œλŠ” μ²˜μŒλΆ€ν„° 읡λͺ… 클래슀λ₯Ό κ΅¬ν˜„ν•œ μ½”λ“œμ΄λ‹€.
  • 읡λͺ… 클래슀의 μΈμŠ€ν„΄μŠ€λŠ” ν‘œν˜„μ‹μ΄κΈ° λ•Œλ¬Έμ— 읡λͺ… 객체라고도 ν•œλ‹€.

🟒 μ²˜μŒλΆ€ν„° 읡λͺ… 클래슀 κ΅¬ν˜„

  • μ²˜μŒλΆ€ν„° 객체 ν‘œν˜„μ‹μ„ μ΄μš©ν•œ 읡λͺ… 클래슀λ₯Ό κ΅¬ν˜„ν•˜κ²Œ 되면 νƒ€μž…μ΄ μ„ μ–Έλ˜μ–΄μžˆμ§€ μ•ŠκΈ° λ•Œλ¬Έμ— Any둜 μ·¨κΈ‰λœλ‹€.

    1. λ”°λΌμ„œ μ•„λž˜μ™€ 같은 μ½”λ“œλŠ” κ²°κ΅­ Anyν΄λž˜μŠ€μ—μ„œ testλΌλŠ” λ©”μ†Œλ“œκ°€ μ—†κΈ° λ•Œλ¬Έμ— μ—λŸ¬κ°€ λ°œμƒν•˜κ²Œ λœλ‹€.

      1
      2
      3
      4
      5
      6
      7
      
       val helloWorld = object {
           fun test() = println("test")
       }
      
       fun main() {
           helloWorld.test() // μ—λŸ¬λ°œμƒ
       }
      
    2. μ‚¬μš©μžκ°€ μ •μ˜ν•œ λ©”μ„œλ“œλ‚˜ 속성에 μ ‘κ·Όν•˜λ €λ©΄ μ•„λž˜μ™€ 같이 privateλ‚˜ localμ—μ„œ μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ‹€.

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      
       private val helloWorld2 = object {
           fun test() = println("helloWorld2")
       }
      
       fun main() {
           val helloWorld3 = object {
               fun test() = println("helloWorld3")
           }
      
           println(helloWorld2.test())  // μ ‘κ·Όκ°€λŠ₯
           println(helloWorld3.test())  // μ ‘κ·Όκ°€λŠ₯
       }
      
  • μ™œ 2λ²ˆμ€ μ‚¬μš©μžκ°€ μ •μ˜ν•œ λ©”μ„œλ“œλ‚˜ 속성에 접근이 κ°€λŠ₯ν•œμ§€λŠ” 잘 λͺ¨λ₯΄κ² λ‹€..

🟒 상속을 μ΄μš©ν•œ 읡λͺ… 클래슀 κ΅¬ν˜„

  • 기쑴에 κ΅¬ν˜„λœ ν΄λž˜μŠ€λ‚˜ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 상속받아 읡λͺ… 클래슀둜 κ΅¬ν˜„ν•  수 μžˆλ‹€.

    1
    2
    3
    4
    5
    
      window.addMouseListener(object : MouseAdapter() {
          override fun mouseClicked(e: MouseEvent) { /*...*/ }
    
          override fun mouseEntered(e: MouseEvent) { /*...*/ }
      })
    

🟒 Object declarations (객체 μ„ μ–Έ)

  • 싱글톀(Singleton) νŒ¨ν„΄μ„ μ‚¬μš©ν•  λ•Œ μ΄μš©ν•  수 μžˆλŠ” κΈ°λŠ₯μ€‘μ˜ ν•˜λ‚˜μ΄λ‹€.
    • μ‹±κΈ€ν†€μ΄λž€ ν”„λ‘œκ·Έλž¨μ΄ μ‹€ν–‰ 도쀑에 μƒμ„±λ˜λŠ” κ°μ²΄λŠ” 단 ν•˜λ‚˜ λΌλŠ” 점
    1
    2
    3
    4
    5
    6
    7
    8
    
      object DataProviderManager {
          fun registerDataProvider(provider: DataProvider) {
              // ...
          }
    
          val allDataProviders: Collection<DataProvider>
              get() = // ...
      }
    
  • λ‹€μŒκ³Ό 같이 μ‚¬μš©ν•  수 μžˆλ‹€.

    1
    
      DataProviderManager.registerDataProvider(...)
    

좜처

  • https://kotlinlang.org/docs/object-declarations.html#object-expressions
This post is licensed under CC BY 4.0 by the author.

[BOJ 17478] μž¬κ·€ν•¨μˆ˜κ°€ λ­”κ°€μš”?

μ•ˆλ“œλ‘œμ΄λ“œμ˜ Activity와 Lifecycle

Comments powered by Disqus.