Scala 타입과 선언

스칼라 타입 구조

  1. Any가 모든 타입들의 최상위 타입이다. Any 클래스에 euals, hashCode, toString 등의 범용 메소드가 정의되어있다.

  2. AnyVal은 값타입 (Int, Double 등..), AnyRef(Java=java.lang.Object)는 참조타입을 대표한다.

  3. Java의 void의 경우 Unit으로 표현된다.

스칼라 타입 캐스팅

  1. 스칼라는 위와 같이 값타입에 대해서 캐스팅할 수 있다.

  2. 단방향 캐스팅이며 역방향 캐스팅은 컴파일되지 않는다.

val x: Long = 987654321
val y: Float = x  // 9.8765434E8
val z: Long = y  // 적합하지 않음(캐스팅 불가)

Nothing, Null

  1. Nothing은 모든 타입의 최하위 타입. 아무 값이 없음을 의미. 문서에 따르면 예외, 프로그램 종료, 무한루프와 같은 비정상 종료 신호를 보내는 용도로 사용.
  2. Null은 모든 AnyRef의 서브 타입. Null은 다른 JVM언어와의 상호 운용성을 위해 제공되고, 스칼라에서는 거의 사용하지 않아야한다. (대체로 Scala의 Option을 사용)

변수 선언

  1. var (mutable: 가변)
// var [변수 이름] = [값]
var a = 1
a = 2 // 컴파일 성공
  1. val (immutable: 불변)
// val [변수 이름] = [값]
val a = 1
a = 2 // 컴파일 실패
  1. 타입 선언
// [val or var] [변수 이름] : [타입] = [값] 
val a : Int = 1
var b : Int = 1
a = 2 // 컴파일 실패
b = 2 // 컴파일 성공
  1. 익명 함수 선언
val a = (b : Int) => b + 1
a(1) // 2

함수 선언

  1. 리턴 타입 없이 함수 선언 (타입 추론)
def test(a : Int, b : Int) { // Int를 리턴한다고 추론
	a + b
}
  1. 리턴 타입 명시
def test(a : Int, b : Int) : Int { 
	a + b
}

마치며

  • 타입과 선언에 대해서 알아보았다. 선언문은 kotlin, typescript와 비슷하게 생겼다. 그래서 아마 이러한 언어들을 사용해보았다면 금방 적응할 수 있지 않을까..? 라는 생각을 한다. 본인도 typescript를 사용하다가 문득 scala가 편해보였으니까.
  • 다음장에서는 조건문과 반복문에 대해서 알아보도록 하겠다.

좋은 웹페이지 즐겨찾기