Kotlin
[Kotlin] 다형성 as is
98kg
2024. 3. 15. 16:06
다형성
클래스의 상속관계에서 오는 인스턴스 호환성을 적극 활용할 수 있는 기능으로
수퍼클래스가 같은 인스턴스를 한번에 관리하거나
인터페이스를 구현하여 사용하는 코드에서도 이용됨
up-casting
up-casting 은 하위 자료형을 상위 자료형에 담는다
ex ) var a: Drink = Cola()
down-casting
up-casting 된 인스턴스를 다시 하위자료형으로 변환하는 것을 down-casting 이라고 한다
하위 자료형은 as, is 연산자를 사용한다
- as
변수를 호환되는 자료형으로 변환해주고
ex ) a as Cola
이후로는 a 는 Cola 로 동작함
var b = a as Cola Cola
변환한 결과를 반환받아 변수에 넣을 수도 있음
- is
변수가 자료형의 호환되는지 먼저 체크한 후 변환 해주는 연산자로 조건문 내에서 사용됨
ex) var a: Drink = Cola()
if(a is Cola){
이 안에서만 a 가 Cola 가 됨
}
(예시코드)
fun main() {
var a = Drink()
a.drink()
var b: Drink = Cola()
b.drink()
//b.washDishes() // drink 변수 이므로 cola 에 washDishes 함수를 호출할 수 없다
if(b is Cola){
b.washDishes()
}
var c = b as Cola
c.washDishes()
b.washDishes()
// as 를 사용하면 반환 값 뿐만 아니라 변수 자체도 다운캐스팅이 되어 참조할 수 없다는 컴파일 에러가 뜨지 않는다.
}
open class Drink{
var name = "음료"
open fun drink(){
println("${name}를 마십니다.")
}
}
class Cola:Drink(){
var type ="콜라"
override fun drink(){
println("${name} 중에 ${type}를 마십니다.")
}
fun washDishes(){
println("${type}로 설거지를 함")
}
}