[Kotlin] 클래스의 다형성(+as, is) 설명 & 예제
- Language/Kotlin
- 2021. 2. 8.
728x90
클래스의 다형성
음료수로 비유를 해보면 콜라를 콜라 자체로 볼 수도 있지만 기호에 따른 음료 라고 볼 수 도 있다. 콜라를 음료 특성으로 만드는 것이 다형성이라고 할 수 있다.
//Cola의 기능까지 모두 사용 가능
//타입 추론으로 Cola 자료형은 생략 가능
var b: Cola = Cola()
업 캐스팅(Up-Casting)
//Drink의 기능만 사용
//Up-Casting : 상위 자료형에 담는다
var a: Drink = Cola()
다운 캐스팅(Down-Casting)
업 캐스팅 된 것을 하위 자료형으로 변환 시키는 것
as
변수를 호환되는 자료형으로 변환해주는 캐스팅 연산자
var a: Drink = Cola()
//이후로는 a는 cola로 작동, 반환도 가능
a as Cola
var b = a as Cola
is
변수가 자료형에 호환되는지를 먼저 체크한 후 변환 해주는 캐스팅 연산자
조건문 내에서 사용 되는 특징이 있음
var a: Drink = Cola()
if(a is Cola) {
//이 안에서만 a가 Cola 가 됨
}
예제
fun main() {
var a = Drink()
a.drink()
//Up-Casting
//washdishes 함수 호출 불가
var b: Drink = Cola()
b.drink()
//b가 Cola와 호환되는지 확인
//Down-Casting
if (b is Cola){
//중괄호 안에서만 Cola 함수 사용 가능
b.washDishes()
}
var c = b as Cola
c.washDishes()
//as 사용시 반환 뿐만아니라 + 변수 자체도 Down-Casting 되기 때문에 에러 뜨지 않는다
b.washDishes()
}
//open : 상속 가능
open class Drink{
var name = "음료"
//함수앞 open : override 가능
open fun drink(){
println("${name}를 마십니다")
}
}
class Cola: Drink(){
var type = "콜라"
override fun drink() {
println("${name}중에 ${type}를 마십니다")
}
fun washDishes(){
println("${type}로 설거지를 합니다")
}
}
다형성은 클래스의 상속관계에서 오는 인스턴스의 호환성을 적극 활용할 수 있는 기능으로 수퍼클래스가 같은 인스턴스를 한번에 관리하거나 인터페이스를 구현하여 사용하는 코드에서도 이용됨
728x90
'Language > Kotlin' 카테고리의 다른 글
[Kotlin] 리스트(List) 설명 & 예제 (0) | 2021.02.09 |
---|---|
[Kotlin] 제너릭(Generic) 설명 & 예제 (0) | 2021.02.09 |
[Kotlin] Observer 패턴(옵저버 패턴) 설명 & 예제 (0) | 2021.02.04 |
[Kotlin] 싱글턴 패턴 & Object 설명 & 예제 (0) | 2021.02.04 |
[Kotlin] 람다 함수 보충 설명, 스코프 함수 설명 & 예제 (0) | 2021.02.03 |