스칼라는 Java랑 다르게 알아서 타입을 추론이 가능하다~!!!! 하지만 막무가내로 되는게 아니라 조금은 안정하게??
설계를 한듯하다. 하나씩 예시를 살펴보자~!
첫번째 예시는 코드로 파악이 가능하다.
object InferenceTest1 extends App {
val x = 1 + 2 * 3 // the type of x is Int
val y = x.toString() // the type of y is String
def succ(x: Int) = x + 1 // method succ returns Int values
}
두번째 예시는 함수에 리턴타입을 정의하지 않았다. 그리고 재귀호출이라서 컴파일에서 오류를 발생시킨다.
object InferenceTest2 {
def fac(n: Int) = if (n == 0) 1 else n * fac(n - 1)
}
세번째는 다형성 메소드 와 제네릭 클래스로 예시를 만들 것이다.
case class MyPair[A, B](x: A, y: B);
object InferenceTest3 extends App {
def id[T](x: T) = x
val p = MyPair(1, "scala") // type: MyPair[Int, String]
val q = id(1) // type: Int
}
네번째는 타입을 선언하고 쓰는 방법이다.
val x: MyPair[Int, String] = MyPair[Int, String](1, "scala")
val y: Int = id[Int](1)
마지막 예시로 obj를 살펴보자 처음에 null로 선언을 하였기 때문에 두번째 줄에서 Object로 다시 할당을 하지만 문법적인 오류를 발생시킨다. Scala에서는 이런 상황을 허용하지 않도록 만들었다.
object InferenceTest4 {
var obj = null
obj = new Object()
}
'Development > Programming' 카테고리의 다른 글
[Scala] Currying (0) | 2015.11.23 |
---|---|
[Scala] Generic function (0) | 2015.09.05 |
[Scala] Explicitly Typed Self References (0) | 2015.03.16 |
[Scala] Lower Type Bounds (0) | 2015.03.12 |
[Scala] Upper Type Bounds (0) | 2015.03.11 |