Dev/Kotlin

4장 - 클래스, 객체, 인터페이스

healthyryu 2018. 5. 27. 22:49

- 코틀린 인터페이스

1. 추상 메소드와 구현이 있는 메소드 정의 가능.

2. 클래스에서 인터페이스를 구현해서 사용할 경우, override 변경자를 꼭 사용해야 한다.

class Button: Clickable {
override fun click() {
println("Click Button")
}

override fun showOff() {
super.showOff()
}
}

interface Clickable {
fun click()
fun showOff() = println("Clickable ShowOff")
}


- 코틀린의 클래스와 메소드는 기본적으로 final 속성

1. 특정 클래스의 상속을 허용하기 위해서 open 변경자를 붙여야 한다.

2. 오버라이드하는 메소드의 구현을 하위 클래스에서 오버라이드 하지 못하게 하려면 오버라이드 앞에 final 명시

open class RichButton: Clickable {
override fun click() {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
}

class RichButton2: RichButton() {
override fun click() {
super.click()
}
}

final 명시하면 아래의 이미지와 같이 빨간색 경고가 뜬다.


- 코틀린에서 가시성 변경자는 기본적으로 공개

1. java 의 public, default, protected, private 은 Kotlin 에서 public, internal, protected, private 이다.


- sealed 선언을 통한 class 확장 제한

1. sealed 없이 when 을 사용할 경우 디폴트 분기인 else 가 강제 된다.

interface Expr
class Num(val value: Int) : Expr
class Sum(val left: Expr, val right: Expr) : Expr

fun eval(e: Expr): Int =
when (e) {
is Num -> e.value
is Sum -> eval(e.right) + eval(e.left)
else ->
throw IllegalArgumentException("Unknown expression")
}

sealed class 사용

sealed class Expr {
class Num(val value: Int) : Expr()
class Sum(val left: Expr, val right: Expr) : Expr()
}

fun eval(e: Expr): Int =
when (e) {
is Expr.Num -> e.value
is Expr.Sum -> eval(e.right) + eval(e.left)
}


반응형

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

코틀린 - 클래스, 객체, 인터페이스(요약)  (0) 2018.09.25
커니의 코틀린 - 3장 (데이터 클래스)  (0) 2018.07.16
let 함수  (0) 2018.06.21
엘비스 연산자 - ?:  (0) 2018.06.11
5장 람다로 프로그래밍  (0) 2018.05.28