-
Notifications
You must be signed in to change notification settings - Fork 7
5.5 암시와 관련된 기술적 문제
ahaljh edited this page Sep 5, 2016
·
3 revisions
-
암시를 사용했을 때 드는 추가 비용
-
프로그래머 - 암시 정의 및 관련 코드를 추가로 작업해야 함
-
컴파일 타임 - 암시 처리를 위해 더 많은 작업 수행으로 빌드 시간이 오래 걸림
-
실행 타임 - 암시적 변환 시 간접 계층을 한 번 더 거쳐야 하므로 실행 시점에 추가 비용 발생
-
암시 관련 바람직하지 못한 예제
// src/main/scala/progscala2/implicits/type-classes-subtyping.sc
trait Stringizer[+T] {
def stringize: String
}
implicit class AnyStringizer(a: Any) extends Stringizer[Any] {
def stringize: String = a match {
case s: String => s
case i: Int => (i*10).toString
case f: Float => (f*10.1).toString
case other =>
throw new UnsupportedOperationException(s"Can't stringize $other")
}
}
val list: List[Any] = List(1, 2.2F, "three", 'symbol)
list foreach { (x:Any) =>
try {
println(s"$x: ${x.stringize}")
} catch {
case e: java.lang.UnsupportedOperationException => println(e)
}
}
- 잠재적인 문제를 피하기 위한 고려해야 할 점
- 언제나 암시적 변환 메소드의 반환 타입을 명시하라.
- 컴파일러가 편의를 제공하기 위해 변환 수행할 수도 있음을 생각해라.
- 컴파일러는 필요한 경우 메소드에 넘기는 인자를 자동 튜플화 한다. (이 경우 경고 표시, 2.11버전)