Front-End/Kotlin

[ Kotlin ] 기본문법 3 상속, 람다, 익명 함수

psy_er 2024. 4. 5. 21:22
728x90

[ Kotlin ] 기본문법 3 상속, 람다, 익명 함수

 

 

1. 상속

// 상속을 가능하게 하려면 open을 써야 한다
// 클래스, 변수, 함수 모두 open을 써야 한다

open class User1(name:String){ // 매개변수에 var를 붙여 멤버변수로 생성이 가능하다
    
    
    open var name = "lee" // 멤버변수를 클래스 안에 생성 가능하다
    
    //constructor(name:String){ // 생성자를 직접 넣거나
    init{ // init 사용
        println("specialUser.. ${this.name}.. $name")
        this.name = name
        println("specialUser.. ${this.name}.. $name")
        //this.name = name
    }
    open fun someFun(){
        println(name)
    }
    class someClass{
        // 클래스 선언 가능
    }
}
class specialUser(name:String):User1(name){ // User1을 상속받는다
    
    override var name = "lee" // 부모의 멤버변수,함수 오버라이드 한다
    override fun someFun() {
        println("specialUser.. ${this.name}.. $name")
        this.name = name
        println("specialUser.. ${this.name}.. $name")
    } 
}

// 데이터 클래스는 데이터만 선언해준다.
// 코틀린만 가지고 있는 특징
// class dataClass(){}  // 일반적인 클래스 선언과 다르다
data class dataClass(val name:String, val age:Int, val mail:String) // 데이터를 저장해주는 기능만 한다

////// 객체를 생성하지 않고 클래스로만 접근하고 싶을 때 /////////////

class User3{
    companion object{
        var data3 = 20
        fun someFun3(){
            println(data3)
        }
    }
}

fun main() {

    println("Hello, world!!!")
    
    var user1 = User1("kim")
    user1.someFun()
    
    val suser = specialUser("park")
    suser.someFun()
    
    val data1 = dataClass("mobile", 21, "ds@duksung.ac.kr")
    println(data1.toString()) // 데이터 클래스의 값 출력
    
    val obj = object{ // 클래스를 선언하지 않고 object로 사용하기
        var data2 = 0
        fun some(){
            println(data2)
        }
    }
    obj.data2 = 20 // 객체 생성하지 않아도 직접 접근 가능
    obj.some()
    
    // var user3 = User3()
    User3.data3 = 30
    User3.someFun3()
    
}

 

2. 익명함수

 

fun sum(n1:Int, n2:Int):Int{return n1+n2}

fun main(){
    println("Hello, wolrd!!!")
    println(sum(5,6))
    
    // sum1을 함수 형태로 선언해 줬다 (익명함수 느낌)
    // 함수 매개변수의 자료형을 지정해줄 수 있다
    var sum1:(Int, Int) -> Int = {n1:Int, n2:Int -> n1+n2} 
    println(sum1(7,6))
    
    // ?를 붙이면 null 값 허용
    var data1:String? = null
    data1 = "mobile" // null이 아닌 값만을 넣어 줘야한다
    // !!를 붙이면 data1에 null이 들어가지 않도록 해준다
    println(data1!!.length)
    
}
728x90