Kotlin

[Kotlin] 코틀린 기초 #2

반응형

함수 선언 (Function declaration)

코틀린은 함수를 자바보다 더 짧고 간단하게 생성할 수 있습니다.
기본적으로 fun 함수명 (파라미터): 리턴타입 의 형식을 따릅니다.

fun add(a: Int, b: Int, c: Int): Int {
    return a + b + c
}

리턴을 생략하고 표기 할 수 있습니다.

fun add(a: Int, b: Int, c: Int): Int = a + b + c

타입추론으로 리턴타입 또한 생략 가능합니다.

fun add(a: Int, b: Int, c: Int) = a + b + c

클래스 선언 (Class declaration)

코틀린은 class 앞에 public 키워드의 생략이 가능합니다.
자바와 다르게 생성자에 들어가는 파라미터의 기본 값을 지정할 수 있습니다.
init은 초기화 블럭이며, constructor는 오버로딩을 사용하기 위해 사용하는 보조생성자입니다.

fun main() {
    var a = Person("이태민", 1993)
    var b = Person("최민호")
    var c = Person("김기범")
}

// 클래스 속성 선언과 동시에 생성자 생성
// var/val 표기하지 않을 시 dafault로 val로 선언
class Person(var name: String, val birthYear: Int) {

    // init: 파라미터나 반환값이 없는 기본생성자 함수
    // 초기화 시 코드를 추가하여 유효성 검사 등 기능을 추가
    init {
        println("안녕하세요, ${birthYear}년에 태어난 ${name}입니다.")
    }

    // constructor: 인스턴트 생성시 추가적인 구문을 수행하는 보조생성자
    // 반드시 기본생성자를 통해 속성을 초기화를 해야함
    // 기본 생성자 생성 후 보조생성자가 생성됨
    constructor(name: String) : this(name, 1991) {
        println("보조생성자가 사용되었습니다.")
    }
}

// 클래스 생성자에 초기값을 이런식으로 지정도 가능
class Person2(var name: String = "이름없음", var age: Int) {

}

클래스 상속 (Inheritance)

코틀린은 상속 금지가 기본이기 때문에 class 키워드 앞에 open을 사용해 상속가능으로 변경합니다.
null을 사용하기 위해서는 타입 뒤에 ?(물음표)를 넣어 nullable type으로 선언합니다.

fun main() {
    var a = Animal("콩떡", 5, "개")
    var b = Dog("초코", 9)

    a.introduce()
    b.introduce()

    b.bark()
    var c = Cat("루이", 1)
    c.meow()

}

// 코틀린은 상속 금지가 기본
// open 키워드를 사용하여 클래스를 상속가능으로 변경
open class Animal(var name: String = "", var age: Int, var type: String) {
    fun introduce() {
        println("저는 $type $name 이고, ${age}살 입니다.")
    }
}

// 서브 클래스가 생성될 때 슈퍼클래스 생성자가 함께 호출 되어야함
// var, val을 붙이면 속성으로 선언되므로 파라미터로 넘기기 위해 선언 키워드를 붙이지않음
class Dog(name: String, age: Int) : Animal(name, age, "개") {
    fun bark() {
        println("멍멍")
    }
}

class Cat(name: String, age: Int) : Animal(name, age, "고양이") {
    fun meow() {
        println("야옹")
    }
}

오버라이딩 (overriding)

코틀린에서는 상속을 받고 슈퍼 클래스에 open으로 정의되어있는 함수를 재정의하는 오버라이딩을 지원합니다.
서브 클래스에서 상속 후 override 키워드를 사용하여 재정의합니다.

fun main() {
    var t = Tiger()
    t.eat()
}

open class Animal2 {
    // open: 서브 클래스에서 오버라이딩 허용
    open fun eat() {
        println("음식을 먹습니다.")
    }
}

class Tiger : Animal2() {
    override fun eat() {
        println("고기를 먹습니다")
    }
}


스터디 코드는 GitHub 프로젝트에서 확인하실 수 있습니다.

반응형

'Kotlin' 카테고리의 다른 글

[Kotlin] 코틀린 기초 #1  (0) 2022.02.01