[Scala] implicit keyword (2) - Implicit class
Scala에서 implicit keyword를 사용하는 또 다른 예제는 Implicit class 이다. Implicit class는 이미 존재하는 class에 새로운 함수를 추가하여 확장하기 위해서 사용된다. 정확히 말하면 원래 있던 클래스 자체를 바꾸지는 않고, class를 implicit conversion해서 호출할 수 있는 함수를 추가할 수 있게 해준다. Standard library에 있는 implicit class 의 대표적인 예는 Duration class들 이다. 위의 예제에서 보듯이 DurationInt 와 DurationDouble 이라는 implicit class 가 각각 Int 와 Double 을 확장시켜서 seconds / milliseconds / nanoseconds 같은 method를 추가해서 Duration 객체를 만들 수 있게 해준다. 이 설명을 보면 지난 글 에서 설명해줬던 implicit converter가 해줄 수 있는 일과 크게 다르지 않아 보인다. 사실 Implicit class는 implicit converter의 syntactic sugar 에 불과하다. 내부적으로 implicit class 로 정의된 class 는 class 의 이름과 같은 implicit converter를 같은 scope에 추가한다. 즉, 아래와 같이 정의된 implicit class 는 다음과 같이 변환된다. 내부적으로 implicit converter에 해당하는 함수를 정의하는 것이기 때문에 몇 가지 제약사항이 있다. 첫 번째 제약사항으로 implicit class 는 trait 이나 class 나 object 안에 정의되어야 한다. 이는 함수의 정의가 trait 이나 class 나 object 안에 정의되어야 하기 때문이다. 그래서 보통 implicit class들 은 package object 안에 정의된다. 두 번째 제약사항은 non-implicit인 parameter가 반드시 1개인 constru...