본문 바로가기

Java and Android/Android Kotlin

Android Kotlin - 다형성(polymorphysm)_casting

1. 다형성(polymorphysm)

 

음료 클래스가 있고 음료클래스를 상속받은 콜라클래스가 있다

이때 콜라()로 인스턴스를 생성하면

음료클래스 기능에 콜라의 기능이 추가된 인스턴스 객체가 생성된다

 

 

 

 

여기서 콜라()를 변수에 담을때 자료형을 : 음료로 하게되면 음료의 기능만 사용이 가능하고

콜라의 기능은 사용불가하며

 

 

 

 

콜라()를 변수에 담을때 자료형을 : 콜라로 하게되면 음료와 콜라 두기능 모두 사용이 가능하다

이때 콜라 인스턴스를 음료자료형 변수에 담는 행위를

상위자료형인 슈퍼클래스로 변환한다고 하여 Up-casting이라고 하며

Up-casting된 인스턴스를 다시 하위자료형으로 변환하면 Down-casting이라고 한다

 

 

 

변수 a : 음료 = 콜라()  의 행위자체가 Up-casting 이며

Down-castingas또는 is라는 캐스팅연산자가 필요하다 

 

●as 연산자

 

 

●is 연산자

 

 

 

직접 실습해보자

 

 

 

Cola()로 인스턴스 객체를 생성하고 Cola클래스 자료형에 넣으면

Drink클래스를 상속받아 Drink 클래스 본연이 가지고 있던 변수 name과 Drink 클래스의 open fun drink()을 override한 Cola클래스의 fun drink()

그리고 Cola클래스가 가지고있던 변수 type과 fun trim을 모두 사용할 수 있지만

 

Cola() 인스턴스 객체를 생성하고 Drink클래스 자료형에 넣으면 위의 기능들 중에서 Cola클래스가 순수히 자신의 것으로 가지고 있던 변수 type과 함수 trim은 사용할 수 없게 되고

Drink클래스가 가지고 있던 변수와 (Cola클래스로 오버라이딩 된)함수만 실행이 가능하다 ---> (Up-casting)

즉 Cola클래스가 Drink클래스를 오버라이딩은 해주지만 그 외 자신이 순수히 가진 변수와 함수는 사용할 수 없게 된다

 

 

 

 

 

이때 Cola클래스가 가진 순수한 변수와 함수까지 사용할 수 있도록 해주는하는 것을 Down-casting이라고 하고 

이를 가능하게 해주는 연산자로 is와 as가 있다

 

 

다형성은 클래스의 상속관계에서 오는 인스턴스의 호환성을 적극 활용하는 것으로 슈퍼클래스가 같은 인스턴스를 한번에 관리하거나 인터페이스를 구현하여 사용하는 코드에서도 이용된다