코틀린 강좌 #17 클래스의 다형성

Kotlin/기본 문법 · 2020. 12. 19. 15:07

테크과학! DiMo

 

테크과학! DiMo

개발자가 얘기하는 생활 속 IT기술에 대한 과학! 여러분이 몰랐던, 혹은 정확히 알지 못했던 IT 테크놀러지를 파드립니다! 좋은 영상을 위한 채널 후원, 투네이션을 통해서 해주세요! 후원링크 htt

www.youtube.com

 

 

개발 환경: play.kotlinlang.org


Up-Casting


상위 자료형인 수퍼클래스로 변환

 

Down-Casting

 

- Up-Casting된 인스턴스를 다시 하위 자료형으로 변환.

 
- Down-Casting은 '별도의 연산자'가 필요함.

 

as

변수를 호환되는 자료형으로 변환해주는 캐스팅 연산자. 반환도 가능함.

 

var a: Dring = Cola()
var b = a as Cola

 

is

변수가 자료형에 호환되는지를 먼저 체크한 후 변환해주는 캐스팅 연산자. 조건문 내에서 사용됨

 

var a: Dring = Cola()
if (a is Cola)
{
  // 이 안에서만 a가 cola가 됨
}

 

fun main() {
   var a = Drink()
   a.drink()
   
   var b:Drink = Cola()
   b.drink()
   
   // 다운 캐스팅을 해야 washDishes 호출 가능.
   if (b is Cola)
    {
        // is는 조건문 내에서 잠시 다운 캐스팅이 가능.
        b.washDishes()
	}
    // b.washDished() => Unresolved reference(참조할 수 없다는 에러)
    
    var c = b as Cola
    c.washDishes()
    b.washDishes() // as를 사용하면 반환값 뿐만 아니라 변수 자체도 Down-Casting이 되어 오류x
    
}

//Drink 클래스를 상속이 가능한 open class로 만들어 줌.
open class Drink {
    var name = "음료"
    
    // override가 가능하도록 open 해줌
    open fun drink() {
        println("${name} 을/를 마십니다")
    }
}

class Cola: Drink() {
    var type = "콜라"
    
    override fun drink() {
        println("${name} 중에 ${type} 을/를 마십니다")
    }
    
    fun washDishes () {
        println("${type}로 설거지를 합니다")
    }
}

Output:
음료 을/를 마십니다
음료 중에 콜라 을/를 마십니다
콜라로 설거지를 합니다
콜라로 설거지를 합니다