안녕하세요? 스칼라 스쿨 번역하다 보니 피네이글이라는 트위터에서 만든 라이브러리 관련 글이 있어 심심풀이로 소스코드를 들여다 보다가 재미있는 주제가 있어 블로그에 정리를 했습니다.
아래는 이 주제에 대한 인트로...
프로그램을 짜다 보면 각종 설정을 조합해 어떤 객체를 만들고, 이를 사용해 작업을 수행해야 하는 경우가 있다. 이때, 꼭 설정해야만 하는 부분과 그렇지 않은 부분이 있거나, 조합에 따라 허용되거나 허용되지 않는 경우가 있을 수도 있다. 예를 들어 원격에서 데이터를 받아 플레이하는 비디오 플레이어를 만든다고 하자. 이때 HTTP로 연결해 파일을 가지고와서 AVC 코덱으로 플레이할 수도 있고, RTSP로 연결해 스트리밍으로 플레이하되 H.264 코덱을 사용할 수도 있을 것이다. 어느경우든 데이터 전송 방식과 코덱은 반드시 설정해야 하지만, 코덱 뒤의 영상 필터는 설정하지 않아도 된다.
라이브러리를 제공하는 경우에도 이런 경우가 많이 있다. 필수 설정 요소는 물론 메뉴얼에 적어두거나 스칼라독 등 소스에 있는 문서 부분에 정보를 추가해 두지만, 시간이 지나면 잊혀지기 마련이다.
런타임에 체크해야만 하는 경우도 있겠지만, 정적으로 구조를 결정해야 하는 상황이라면 컴파일시 필수적인 설정이 되어 있지 않은 객체는 컴파일 자체가 안된다면 더 좋을 것이다. 스칼라의 implicit와 일반적 타입(generic type)을 사용해 이런 처리가 가능하다. 또한, @impilcitNotFound 애노테이션을 사용해 오류 메시지에 설정 상태를 표시할 수도 있다. 물론 타입시스템을 사용하기 때문에 아주 자세한(개별 설정 값 수준의) 정보는 보여주기 힘들지만, 설정이 되었는지 여부 정도는 표시할 수 있다.
URL은
http://enshahar.com/2013/05/16/%EC%8A%A4%EC%B9%BC%EB%9D%BC%ED%83%80%EC%9E%85%EC%B2%B4%ED%81%AC%EB%A1%9C%EC%84%A4%EC%A0%95%EC%BB%B4%ED%8C%8C%EC%9D%BC%EC%8B%9C%EC%B2%B4%ED%81%AC/ 입니다.
그냥 이런짓도 하는구나 하고 한번 보시면 될듯.