언어/Kotlin

Kotlin class

JAON 2021. 3. 5. 00:30

Class

package com.example.myapplication.kotlin

fun main(array: Array<String>) {
    val smallCar: Car = Car("V8 engine", "small")
    val bigCar = Car("V8 engine", "big")
    val superCar: SuperCar = SuperCar("good engine", "big", "black")
}

class Car(var engine: String, var body: String) {  //constructor 축약버전

}

class SuperCar {
    var engine: String = ""
    var body: String = ""
    var door: String = ""

    constructor(engine: String, body: String, door: String) {
        this.engine = engine
        this.body = body
        this.door = door
    }
}

class Car1 constructor(engine: String, body: String) {
    var door: String = ""

    //생성자
    constructor(engine: String, body: String, door: String) : this(engine, body) {
        this.door = door
    }
}

class Car2 {
    var engine: String = ""
    var body: String = ""
    var door: String = ""

    constructor(engine: String, body: String) {
        this.engine = engine
        this.body = body
    }

    constructor(engine: String, body: String, door: String) {
        this.engine = engine
        this.body = body
        this.door = door
    }
}

class RunnableCar constructor(engine:String,body:String) {
    fun ride() {
        println("탑승")
    }
    fun drive() {
        println("Go")
    }
    fun navi(destination:String) {
        println("$destination 으로 목적지 설정")
    }
}

class RunnableCar2 {
    var engine: String = ""  // default는 public 멤버변수
    var body: String = ""

    constructor(engine: String, body: String) {
        println("RunnableCar2의 생성자가 호출되었습니다.")
        this.engine = engine
        this.body = body
    }
    init { //해당 클래스가 생성되기전(생성자가 호출되기전)에 호출되는 함수 
        println("RunnableCar2의 init함수가 호출되었습니다.")
    }

    fun ride() {
        println("탑승")
    }

    fun drive() {
        println("Go")
    }

    fun navi(destination: String) {
        println("$destination 으로 목적지 설정")
    }
}

class OverloadingTestClass() {
    val a: Int = 10

    fun overloadingTest(a: Int) { //오버로딩
        println("Up")
    }

    fun overloadingTest(a: Int, b: Int) { //오버로딩
        println("Down")
    }
}

class Tv(val channels: List<String>) {

    var onOff: Boolean = false
    var currentChannelNumber = 0
        set(value) { //currentChannelNumber 의 값이 할당될때 호출된다.
            field = value
            //currentChannelNumber = value  -> 해당 부분에서 set함수가 다시 호출되기에 무한루프가 발생한다.
            if (field > channels.size-1) {
                field = 0
            }
            if (field <0) {
               field = channels.size -1
            }
        }
        get() { //currentChannelNumber의 값이 호출될때 실행
            println("호출되었습니다.")
            return field
        }
    fun switch() {
        onOff = !onOff
    }

    fun chennalUp() {
        currentChannelNumber += 1
    }

    fun channelDown() {
        currentChannelNumber -= 1
    }

    fun checkCurrentChannel(): String {
        return channels[this.currentChannelNumber]
    }
}