코틀린

코틀린 5편 (data class, object, companion object)

태인킴 2020. 11. 11. 17:14
반응형


1. data class

data class Device(val kind : String, val price : Int)

class Device2(val kind : String, val price : Int)

fun main() {
    val device = Device("Android", 200)
    val device2 = Device2("IOS", 300)

    println("device : ${device}")
    println("device2 : ${device2}")
}

출력 결과

코틀린에서는 java의 POJO 클래스와 같은 data class를 가지고 있습니다. 이 data class는 toString(), hashCode(), equals() 메서드를 오버라이딩 하고 있습니다. 따라서, println으로 출력 시, device는 멤버 변수들의 값을 출력 하고, device2는 주소값을 출력 합니다.

 

 

2. companion object

fun main() {
    val book = Book.create()
    val book2 = Book.Companion.create()

    val book3 = Book3.bookFactory.create()
    
    val id = Book4.bookFactory.getId()
}

class Book(val id : Int, val name : String) {
    companion object {
        fun create() = Book(0, "play Game")
    }
}

class Book3(val id : Int, val name : String) {
    companion object bookFactory {
        fun create() = Book3(1, "play Game2")
    }
}

class Book4(val id : Int, val name : String) {
    companion object bookFactory : IdProvider{
        override fun getId(): Int {
            return 10
        }
    }
}

interface IdProvider {
    fun getId() : Int
}

코틀린에는 자바의 static 키워드존재 하지 않습니다. static 대신에 companion object 라는 키워드를 사용하여 java의 static 역할을 할수 있습니다. 따라서, companion object는 인스턴스 메서드, 변수가 아니라 클래스 메서드, 변수 입니다. 따로 인스턴스화를 하지 않아도, companion object를 사용 할수 있습니다. 또는 정적 메서드, 변수 라고 합니다. main 함수를 보시면 companion object의 사용 방법을 알수 있습니다. java 처럼, 바로, Book.create() 라고 호출 할 수 있습니다. 또한, 코틀린에서는 Book.Companion.create() 라고 Companion 키워드를 붙여 줄수 있습니다. Book3를 보시면 companion object 의 이름을 붙여 줄수 있습니다. bookFactory 라는 이름을 붙여 주었습니다. 이 경우 Book3.bookFactory.create() 라고 호출 할 수 있습니다. Book4를 보시면 companion object의 interface를 상속하여 메서드를 override 해서 사용 할 수 있습니다. 

 

 

3. object

object CarFactory2 {
    val car = Car(20)
    fun makeCar(horsePower : Int) : Car {
        car.horsePower = horsePower
        return car
    }
}

data class Car(var horsePower : Int)

fun main() {
    val car = CarFactory2.makeCar(10)
    val car2 = CarFactory2.makeCar(100)

    println(car)
    println(car2)
}

출력 결과

java 에서는 singleton 객체를 만들기 위해서 다양한 방법을 사용 합니다. 하지만, 코틀린에서는 object 라는 키워드로 singleton 객체를 지원 합니다.

반응형

'코틀린' 카테고리의 다른 글

코틀린 SAM 변환이 왜 되지 않을까?  (0) 2020.11.25
코틀린 6편 (lateinit)  (0) 2020.11.13
코틀린 4편 (람다 Lamda)  (0) 2020.11.11
코틀린 3편 (클래스 생성자와 상속)  (0) 2020.11.10
코틀린 2편  (0) 2020.11.10