Language/Kotlin / / 2021. 1. 19. 01:36

Constructor 이것만 외우자

 


// 생성자 변수인 동시에 Class MyFriend의 member 변수. 이 생성자에 있는 포맷은 객체를 할당할 때 반드시 따라야 한다.
class MyFriend(var name: String?,
               private var age: Int?,
               private var isMarried: Boolean?,
               private var nickname: String?) {

    var address: String? = null

    // 기본 constructor
    init { // 첫 번째 생성자가 호출된 이후에 init에서 초기화가 이루어진다.
        this.name = "Kang"
        this.age = 10
        this.isMarried = false
        this.nickname = "SeongUk"
    }

    // 추가 생성자: address변수 추가, 반드시 따르지 않아도 되므로 비교적 유연하다. ('var' on secondary constructor parameter is not allowed)
    constructor(name: String?, age: Int, isMarried: Boolean, nickname: String?, address: String?): this(name, age, isMarried, nickname) {
        this.address = address
    }
}

class Car() { // class Car로 하면 안 된다. Car() <- 이렇게 헤야 생성자 인식
    var name: String? = null
    var brand: String? = null
    var isSuv: Boolean? = null

    init {
        println("init")
        this.isSuv = false
        this.brand = null
    }

    // 이런 식으로 반드시 구현해야 하는 First 생성자는 아무런 변수도 설정하지 않고 secondary 생성자로 유연하게 구현할 수 있다.
    constructor(brand: String?): this() {
        println("Secondary Constructor")
        this.brand = brand
    }

    constructor(name: String?, isSuv: Boolean?): this() {
        this.name = name
        this.isSuv = isSuv
    }
}

fun main() {
    val myFriend = MyFriend(name="KangSeongUk", age=25, isMarried=false, nickname="Aiden")
    val myFriend2: MyFriend? = MyFriend("Aiden", 25, true, "Cosmos", "Suwon City")
    println("My name is ${myFriend.name}")
    println("My address is ${myFriend2?.address}")

    // 호출 순서: 첫 번째 생성자 -> init -> secondary 생성자
    val car: Car = Car("BMW")
    val car2: Car = Car()
    val car3: Car = Car("Disney", false)
    println(car.brand)
    println(car2.brand)
    println(car3.name)
}

// 출력
My name is Kang
My address is Suwon City
init
Secondary Constructor
init
init
BMW
null
Disney

'Language > Kotlin' 카테고리의 다른 글

Kotlin에서 Lambda 이것만 외우자  (0) 2021.01.18
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유