-
[Kotlin] 다형성 as isKotlin 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}로 설거지를 함") } }
'Kotlin' 카테고리의 다른 글
[Kotlin] List<out T> , MutableList<T> (0) 2024.03.16 [Kotlin] Generic (0) 2024.03.15 [Kotlin] 익명객체와 옵저버 패턴 (0) 2024.03.12 [Kotlin] Object (0) 2024.03.12 [Kotlin] 스코프 함수 (1) 2024.03.12