라벨이 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 이 필요한 경우 자동으로 변환해서 넘겨준다. Implicit converter에 대응되는 개념이 다른 언어에 없는 것은 아니다. C++에서는 un

이 블로그의 인기 게시물

Escape Codes의 역사

[C++] enum class - 안전하고 쓰기 쉬운 enum

RAII는 무엇인가

Log Aggregator 비교 - Scribe, Flume, Fluentd, logstash

[Python] cache 데코레이터로 최적화하기