scala> if (true) 1 else false
val res0: AnyVal = 1
놀랍게도 AnyVal이다.
AnyVal은 1:Int와 false:Boolean의 공통 조상이다.
이렇게 생각할 수 있다.
"아니, 뻔하게 리턴값이 1인데 당연히 Int여야하는거 아닌가?"
저 문장에서 컴파일러가 Int로 타입 바인등을 하면 나중에 저 조건문이 바뀔 경우 관련된 모든 함수를 수정해야한다.
즉 프로그램의 안정성을 해친다. 그래서 가장 상위타입으로 타입바인딩 한다.
'개발' 카테고리의 다른 글
[Scala] 스칼라는 예외를 이용하지 않고 오류를 처리한다. (0) | 2021.06.30 |
---|---|
[Scala] 다형성 [T]는 컴파일 타임에 사라진다. (0) | 2021.06.20 |
[Scala] Call-by-value 와 Call-by-name (0) | 2021.06.13 |
[Scala] lazy val을 써야하는 경우 (0) | 2021.06.07 |
[Scala] 순수함수와 참조투명성, 치환모형 (0) | 2021.06.07 |