Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. 이전 글에서 `Expr` 인터페이스와 `Num`, `Sum` 이라는 하위 클래스를 가지고 덧셈을 구현했었다. (이전 글: [Kotlin] enum & when & smart cast(스마트 캐스트) interface Expr class Num(val value: Int) : Expr class Sum(val left: Expr, val right: Expr) : Expr fun evaluate(e: Expr): Int = when (e) { is Num -> e.value is Sum -> evaluate(e.right) + evaluate(e.left) else -> throw Illeg..