Home Type class pattern vs implicit class
Post
Cancel

Type class pattern vs implicit class

Type class pattern vs implicit class

implicit class는 보통 존재하는 타입에 대한 extention method를 제공하는데 사용된다.

1
2
3
4
5
implicit class IntExt(val x: Int) extends AnyVal {
  def squared: Int = x * x
}

10.squared shouldEqual 1000

Type class는 ad-hoc polymorphism을 제공한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
trait Show[T] {
  def show(x: T): String
}

implicit val intHexShow: Show[Int] = new Show[Int] {
  override def show(x: Int): String = Integer.toHexString(x)
}

implicit val stringReverseShow: Show[String] = new Show[String] {
  override def show(x: String): String = x.reverse
}

def showPrint[T](value: T)(implicit s: Show[T]): Unit = {
  println(s.show(value))
}

showPrint(12)  // prints "c"
showPrint("hello")  // prints "olleh"

파라미터의 타입에 맞는 Show 클래스를 생성하기때문에, ad-hoc polymorphism을 제공한다. 주로 존재하는 타입에 대해서 generic한 방식으로 새로운 behavior를 제공하고 싶을때 사용한다.

보충설명

implicit class

This post is licensed under CC BY 4.0 by the author.

Trending Tags