[기술 면접 질문] 형 변환 (Type Casting)
형 변환(Type Casting)
- 어떤 값의 데이터 타입을 다른 데이터 타입으로 변환하는 것
 
- Kotlin은 모든 값을 객체로 관리
=> Kotlin에서의 형 변환은 클래스 캐스팅 
- 클래스 캐스팅의 두 종류
- 업 캐스팅(up casting)
- 하위 클래스 타입 -> 상위 클래스 타입의 객체로 변환(축소)
 
- 다형성 제공
 
 
- 다운 캐스팅(down casting)
- 상위 클래스 타입 -> 하위 클래스 타입(원본 타입)의 객체로 변환(확장)
 
 
 
- Kotlin 클래스 캐스팅 연산자
- as 연산자
- 객체를 지정된 클래스 타입으로 변환하는 연산자
 
- as 연산자로 형 변환이 발생한 객체는 변환된 타입 유지
 
 
- is 연산자
- 형 변환이 가능하면 변환을 하고 true를 반환하는 연산자
 
- 일반적으로 if 문의 조건문으로 사용
-> if 문 내에서 변환된 타입이 유지
-> if 문에서 나가게 되면 형 변환되기 전 타입으로 돌아감 
 
 
open class Person(){
    fun greet() = println("안녕하세요.")
}
class Dancer():Person(){
    fun dance() = println("둠칫둠칫")
}
class Singer():Person(){
    fun sing() = println("룰루랄라")
}
fun main() {
    val dancer1 = Dancer()
    val dancer2 = Dancer()
    val singer1 = Singer()
    val singer2 = Singer()
    
    val people = mutableListOf<Person>()
    
    
    people.add(dancer1 as Person)
    people.add(dancer2 as Person)
    people.add(singer1 as Person)
    people.add(singer2 as Person)
    
    people.forEach{
        
        
        if(it is Dancer){
            it.dance()
        }
        if(it is Singer){
            it.sing()
        }
    }
}