Kotlin/Basic

Kotlin은 Java와 무엇이 다른가? (11) - Object

bongveloper 2024. 9. 20. 17:17

Object

Kotlin에서 object는 Java의 object 하고는 좀 차원이 다르다.

Kotlin에 Object는 크게 3가지로 나뉜다.

  • Object
  • Companion Object
  • Anonymous Object

이 3개의 Object는 쓰임과 위치에 따라서 달라지게 된다.

Object

  • object 키워드는 클래스 외부에서 쓰이게 되고 싱글톤 객체를 쉽게 생성하게 해주는 키워드이다.
  • 동시성 이슈를 해결해 주기 때문에 Thread Safe 하게 사용이 가능하다.
  • 생성하고자 하는 객체 앞에 object를 붙여 사용한다. object 객체이름
    object Car {
      var carName: String = "GM"
      fun start(){
          println("start: $carName")
      }
    }
    

fun main(){
Car.carName = "Hyundai"
println("carName: $Car.carName")
Car.start()
}


## Companion Object
- Companion Object는 클래스 내부에서 사용된다.  
- 말 그대로 Class와 동반되는 객체이기 때문이다.
- Companion Object는  Java의 static과 비슷한 기능을 하지만  보다 더 많은 기능을 가지고 있는 키워드이다.
- 클래스 내부에서  `companion object{}` 로 사용이 가능하다.
```kotlin
class Car private constructor(
    val model: String,
    val color: String,
    val year: Int
){
    companion object Factory {
        private const val DEFAULT_COLOR = "RED"

        fun hyundaiCar(year: Int){
            return Car("hyundai", DEFAULT_COLOR year)    
        }
    }
}

fun main(){
    Car.Factory.hyundaiCar(2023)
}

companion object 키워드를 통해 Car라는 클래스의 companion object를 구현했다.

  • companion object 옆에 Factory라는 이름을 부여하였고 다른 이름 또는 없는 경우에는 Companion이라는 이름을 사용한다.
  • 공백에 경우에는 호출할 때에도 Companion이라는 이름으로 호출해야 한다. Car.Companion.hyundaiCar()
  • DEFAULT_COLOR에 const 키워드를 사용해 컴파일 시 생성한다.
  • const 키워드가 없는 경우에는 런타임 시 생성된다.
  • companion object는 객체 그 자체여서 interface를 구현 가능하다.
  • companion object 이름을 생략하고 싶다면 @JvmStatic을 사용해 생략할 수도 있다.

Anonymous Object

  • Java에서는 Anonymous Class(익명 클랙스)를 Anonymous Object로 구현한다.
  • 일회성으로 사용되는 객체를 만들어야 할 때 사용되지만 사실 실제로 사용해 본 적은 없다.
  • 객체 앞에 object : 객체를 사용해서 구현이 가능하다.
abstract class Car { 
    abstract  fun  accelerate()
    abstract fun  brake()
}

val sportsCar = object : Car() 
{ 
    override fun accelerate() {
        println("Sports car is accelerating rapidly")
    }
    override fun brake() { 
        println("Sports car is braking sharply")
    }
}

sportsCar.accelerate()
sportsCar.brake()

요약

  • object 키워드는 상황에 따라 위치에 따라 달리 쓰인다.
  • 싱글톤 패턴을 구현해야 하는 경우에는 object 객체이름으로 구현한다.
  • static 한 값을 구현해야 하는 경우에는 클래스 내부에서 companion object {}로 구현한다.
  • companion object는 이름을 설정할 수 있다.
  • const 키워드의 유무에 따라 컴파일 시 생성, 런타임 시 생성으로 나뉜다.
  • object : 객체를 통해서 anonymous object Java에 익명 클래스 구현이 가능하다.

 

출처:https://www.inflearn.com/course/java-to-kotlin/dashboard

 

자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide) 강의 | 최태현 - 인프런

최태현 | 이 강의를 통해 Kotlin 언어의 특성과 배경, 문법과 동작 원리, 사용 용례, Java와 Kotlin을 함께 사용할 때에 주의할 점 등을 배울 수 있습니다., 요즘 대세인 코틀린을 공부하고 싶다면?⭐ J

www.inflearn.com