Skip to content

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버전)
Clone this wiki locally