2022. 11. 15. 23:25ㆍDev/Scala
Tour of Scala 시리즈의 글은 다중패러다임(함수형 + OOP) 언어인 Scala 의 공식 튜토리얼 'Tour of Scala 문서를 톺아보고 학습해보는 글이다. 내용에 따라서 추가된 내용과 생략된 부분이 있다. (중요) 또한 학습은
Scala 3 을 기준으로 작성
되었다. 몇몇 부분에서 2버전과는 다른 내용으로 진행하였다.
- 공식 web site : https://www.scala-lang.org
- Tour of Scala : https://docs.scala-lang.org/tour/tour-of-scala.html
Scala Type Hierarchy
`Any` 는 모든 타입의 슈퍼타입이며 최상위에 위치하는 가장 기본이 되는 타입. `equals`, `hashCode`, `toString` 과 같은 기본적인 메소드들을 정의하고 있다. (이것은 마치 Java의 Object 와 같은 타입인 것처럼 보이지만 이후 설명할 `AnyRef` 타입이 대놓고 Java 의 그것과 상응하는 타입이라 소개하고 있다.) `Any` 는 `AnyVal` 과 `AnyRef` 라는 2개의 하위 클래스를 가진다.
`AnyVal` 은 value type 을 나타낸다. non-nullable 이며 `Float`, `Long`, `Int`, `Short`, `Byte`, `Char`, `Unit`, `Boolean`. 이 중에 `Unit` 은 아무 값도 가지지 않는 타입으로 반드시 return 을 해줘야 하는 scala 의 function 에서 아무것도 return 하지 않을때 유용하게 사용할 수 있다.
`AnyRef`는 reference type 이다. 사용자에 의해 만들어진 모든 클래스들 또한 이 `AnyRef` 의 하위타입이다. Java 의 `java.lang.Object` 타입과 완벽히 대응되는 타입이다.(위에 언급된 `Any` 타입이 아니라 `AnyRef` 가 `java.lang.Object` 타입과 대응되는 것에 주의)
Type Casting
value type 은 아래 다이어그램의 방향으로 형변환이 가능하다. Byte 타입은 Short 타입으로 가능하고 Char 는 Int 로, Int 는 Long 으로 가능하다. (역방향은 불가하다-compile error).
val x: Long = 987654321
val y: Float = x.toFloat
println(y) // 9.8765434E8
val face: Char = '☺'
val number: Int = face
print(number) // 9786
reference type 은 하위 클래스로 형변환이 가능하다.
Nothing and Null
`Nothing` 은 모든 타입의 가장 최하위 타입(bottom type) 이다. 이 `Nothing` type 을 가지는 value 는 없다. 예외 발생이나 프로그램의 종료, 무한루프와 같이 그 상태가 정상적으로 반환되지 않을때 사용하는 타입.
`Null` 은 모든 reference type 의 최하위 타입이다. `null` 이라는 단일 값을 가진다. `Null` 은 JVM 언어와의 호환성을 위해서 존재하지만 scala 에서는 사용되지 않아야 한다.
'Dev > Scala' 카테고리의 다른 글
[Tour of Scala] Basics (0) | 2022.10.28 |
---|