1. 스칼라 인터프리터
1 + 2를 입력했을 때 res0: Int = 3은 다음과 같은 정보를 나타낸다.
* 계산결과 값을나타낼 때 사용할 수 있는, 자동으로 만들어졌거나 사용자가 정의한 이름(res0, 0번째 결과)
* 콜론(:)과 결과의 타입(Int)
* 등호(=)
* 사용자가 입력한 표현식을 계산해 얻은 결과 값(3)
Int 타입은 scala 패키지의 Int 클래스. 즉, scala.Int. 자바의 primitive type에 대응하는 클래스가 scala 패키지에 존재.
스칼라 패키지는 정보 은닉을 위한 메커니즘을 제공하고 전역 네임스페이스를 분할해준다는 점에서 자바 패키지와 비슷하다.
또한 primitive type을 사용해 성능상 이점을 얻을 수 있도록, 이런 클래스에 속한 값을 사용하는 스칼라 코드를 자바 바이트코드로 컴파일하면, 컴파일러는 가능한 자바 원시 코드를 사용한 코드를 생성한다.
'res번호' 식별자(identifier)'는 나중에 재사용가능. 다음과 같이
2. 변수 정의
val : 자바의 final 변수와 비슷. 재할당x
var : 자바의 final이 아닌 변수와 비슷. 재할당가능
이는 코틀린과 비슷한 문법인데 아마도 함수형프로그래밍과 깊은 연관이 있는 듯하다.
msg의 타입은 java.lang.String이다.
스칼라에서의 문자열 구현은 자바의 그것이다.
또한 msg의 타입이 String인것을, 스칼라는 타입추론을 통해 알아낸 것이다.
필요하면 명시가능하다. 다음과 같이
물론 풀네임생략가능하다.(java.lang. 생략가능)
3. 함수 정의
def 키워드는 파이썬이 함수를 정의할 때 쓰던 키워드인걸로 알고 있다.
파라미터의 타입선언은 위 Stirng과 같다.
특히 def max(): Int 에서 : Int는 함수의 결과 타입(result type)을 정의하는 부분인데
자바에서는 반환타입(return type), 스칼라에서는 결과 타입(result type).
이렇게 부르는 이유가 역시 함수형프로그래밍에 기반한 사고이지 않나 추측해본다.
결과 타입은 생략이 가능하기도 한데, 재귀적인 경우는 꼭 붙여줘야한다.
그리고 자바의 람다바디처럼 한줄일 경우 중괄호 생략가능.
호출은 다음과 같이
자바의 void와 비슷한 경우가 있는데