-
Notifications
You must be signed in to change notification settings - Fork 7
타입 정보 추론하기
druwahf edited this page Aug 8, 2016
·
2 revisions
정적 타입 언어는 때로 번잡할 수 있다.
import java.util.HashMap;
...
HashMap<Integer, String> intToStringMap = new HashMap<Integer, String>();
HashMap<Integer, String> intToStringMap = new HashMap<>();
val intToStringMap: HashMap[Integer, String] = new HashMap
// HashMap[Integer, String] 을 등호의 우변으로 옮길수 있다
val intToStringMap2 = new HashMap[Integer, String]
하스켈과 같은 일부 함수형 언어는 전역 타입추론을 사용하므로 가의 모든 타입을 추론할수 있지만 스칼라는 서브타입 다형성, 즉 상속을 지원해야 한다는 이유로 전역 타입 추론을 사용하지 않는다
- 변경 가능한 varsk 변경 불가능한 val 선엔에서 값을 대입하지 않는 경우
- 모든 메서드 매개변수
- 다음과 같은 메서드 반환타입의 경우 -> 메서드 안에서 return 을 명시적으로 호출하는 경우 -> 메서드가 재귀적인 경우 -> 오버로딩한 둘 이상의 메서드가 있고, 그중 한 메서드가 다른 메서드를 호출하는 경우, 호출하는 메서드에는 반환 타입을 표기해야 함 -> 컴파일러가 추론한 타입이 개발자의 의도보다 더 일반적인 경우
// src/main/scala/progscala2/typelessdomore/method-overloaded-return-v1.scX
// 'StringUtil'의 첫 번째 버전 (컴파일 오류 발생)
// 에러: 컴파일 할 수 없음. 두번째 'joiner'에 String 반환 타입이 필요.
object StringUtilV1 {
def joiner(strings: String*): String = strings.mkString("-")
def joiner(strings: List[String]) = joiner(strins : _*) // compile error
}
println( StringUtilV1.joiner(List("Programming", "Scala")) )
...
<console>:10: error: overloaded method joiner needs result type
def joiner(strings: List[String]) = joiner(strings : _*) // compile error
^
...
def joiner(strins: List[String]): String = joiner(strings :_*)
// src/main/scala/progscala2/typelessdomore/method-broad-inference-return.scX
// 오류: 컴파일 할 수 없음. 메서드는 실제로 List[Any]를 반환하는데, 이는 너무 '광범위'함
def makeList(strings: String*) = {
if(strings.length == 0)
}