스칼라 타입 구조
Any
가 모든 타입들의 최상위 타입이다. Any
클래스에 euals, hashCode, toString 등의 범용 메소드가 정의되어있다.
AnyVal
은 값타입 (Int
, Double
등..), AnyRef(Java=java.lang.Object)
는 참조타입을 대표한다.
Java의 void
의 경우 Unit
으로 표현된다.
스칼라 타입 캐스팅
스칼라는 위와 같이 값타입에 대해서 캐스팅할 수 있다.
단방향 캐스팅이며 역방향 캐스팅은 컴파일되지 않는다.
val x: Long = 987654321
val y: Float = x // 9.8765434E8
val z: Long = y // 적합하지 않음(캐스팅 불가)
Nothing, Null
Nothing
은 모든 타입의 최하위 타입. 아무 값이 없음을 의미. 문서에 따르면 예외, 프로그램 종료, 무한루프와 같은 비정상 종료 신호를 보내는 용도로 사용.Null
은 모든 AnyRef
의 서브 타입. Null은 다른 JVM언어와의 상호 운용성을 위해 제공되고, 스칼라에서는 거의 사용하지 않아야한다. (대체로 Scala의 Option
을 사용)변수 선언
// var [변수 이름] = [값]
var a = 1
a = 2 // 컴파일 성공
// val [변수 이름] = [값]
val a = 1
a = 2 // 컴파일 실패
// [val or var] [변수 이름] : [타입] = [값]
val a : Int = 1
var b : Int = 1
a = 2 // 컴파일 실패
b = 2 // 컴파일 성공
val a = (b : Int) => b + 1
a(1) // 2
함수 선언
def test(a : Int, b : Int) { // Int를 리턴한다고 추론
a + b
}
def test(a : Int, b : Int) : Int {
a + b
}
마치며
kotlin
, typescript
와 비슷하게 생겼다. 그래서 아마 이러한 언어들을 사용해보았다면 금방 적응할 수 있지 않을까..? 라는 생각을 한다. 본인도 typescript
를 사용하다가 문득 scala가 편해보였으니까.