본문 바로가기

Development/Programming

[Scala] Local Type Inference

 스칼라는 Java랑 다르게 알아서 타입을 추론이 가능하다~!!!! 하지만 막무가내로 되는게 아니라 조금은 안정하게??

설계를 한듯하다. 하나씩 예시를 살펴보자~!


첫번째 예시는 코드로 파악이 가능하다.


  1. object InferenceTest1 extends App {
  2. val x = 1 + 2 * 3 // the type of x is Int
  3. val y = x.toString() // the type of y is String
  4. def succ(x: Int) = x + 1 // method succ returns Int values
  5. }


두번째 예시는 함수에 리턴타입을 정의하지 않았다. 그리고 재귀호출이라서 컴파일에서 오류를 발생시킨다.


  1. object InferenceTest2 {
  2. def fac(n: Int) = if (n == 0) 1 else n * fac(n - 1)
  3. }


세번째는 다형성 메소드 와 제네릭 클래스로 예시를 만들 것이다.


  1. case class MyPair[A, B](x: A, y: B);
  2. object InferenceTest3 extends App {
  3. def id[T](x: T) = x
  4. val p = MyPair(1, "scala") // type: MyPair[Int, String]
  5. val q = id(1) // type: Int
  6. }


네번째는 타입을 선언하고 쓰는 방법이다.


  1. val x: MyPair[Int, String] = MyPair[Int, String](1, "scala")
  2. val y: Int = id[Int](1)


마지막 예시로 obj를 살펴보자 처음에 null로 선언을 하였기 때문에 두번째 줄에서 Object로 다시 할당을 하지만 문법적인 오류를 발생시킨다. Scala에서는 이런 상황을 허용하지 않도록 만들었다.


  1. object InferenceTest4 {
  2. var obj = null
  3. obj = new Object()
  4. }


'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