라벨이 implicit converter인 게시물 표시

[Scala] implicit keyword (1) - implicit converter

 Implicit converter가 하는 일은 이름 그대로 value를 적절한 type으로 implicit하게 convert 하는 것이다.  Scala는 기본적으로 strong typed language이기 때문에 implicit conversion을 지원하지 않는다. 함수를 호출할 때 함수의 symbol에 맞지 않으면 바로 컴파일에러가 발생한다.  implicit conversion을 하기 위해서는 해당 scope 안에 implicit converter를 구현해두어야 한다.  Implicit converter의 선언은 다음과 같다.  Implicit converter는  unary function 에 implicit keyword를 붙여주는 것으로 정의된다.  이렇게 Implicit converter를 구현해두면,  sizeToRectangle  함수가 정의되어 있는 scope에서는 Size 객체가 Rectangle 객체로 implicit conversion이 가능해진다.  예를 들어 Scala에서 자주 쓰이는 Option 이라는 class를 보자.  Option은 c#의 nullable 과 유사한 type으로 원소가 없을 수 있는 객체 이다. 이는 다른 관점에서 보면 최대 원소가 1개인 collection이라고 볼 수 있고, Option을 사용할 때 collection처럼 list comprehensive method 1) 를 사용하는 것을 권장한다.  하지만 Option코드 를 보면 Option은 Iterable 이나 Traversable 을 상속받지 않았고, 일부 함수를 제외하고 collection처럼 이용는데 필요한 모든 함수를 가지고 있지도 않다.  하지만 Option을 Iterable로 변환해주는  option2Iterable 이라는 implicit converter가 있기 때문에 iterable이 필요한 경우 자동으로 convert해서 넘겨준다.  Implicit converter에 대응되는 개념이 다른 언어에 없는 것