본문 바로가기

개발

[Scala] if true 1 else false 의 타입은 뭘까?

scala> if (true)  1 else false
val res0: AnyVal = 1

놀랍게도 AnyVal이다.

 

AnyVal은 1:Int와 false:Boolean의 공통 조상이다.

 

이렇게 생각할 수 있다.

 

"아니, 뻔하게 리턴값이 1인데 당연히 Int여야하는거 아닌가?"

 

저 문장에서 컴파일러가 Int로 타입 바인등을 하면 나중에 저 조건문이 바뀔 경우 관련된 모든 함수를 수정해야한다. 

 

프로그램의 안정성을 해친다. 그래서 가장 상위타입으로 타입바인딩 한다.