처음배우는엘릭서프로그래밍
9.1 엘릭서에서 타입이란
이전 두 장에서 리스트와 맵의 기본 내용을 다루었다. 이미 눈치챘을지도 모르겠지만, 리스트와 맵을 타입이라고 소개하긴 했으나 정확히 표현했다고 하기는 어려다. 먼저 이해해야 하는 사실은, 기본 자료형인 엘릭서 리스트는 단지 값들을 순서대로 묶어 놓았을 뿐이다. [...]리터럴을 사용해 리스트를 생성하고. | 연산자로 리스트의 구조를 분해하거나 만들 수 있다.
그리고 또 다른 계층에 List 모듈이 있다. 이 모듈은 리스트 연산 함수들을 제공하며, 함수들은 보통 이러한 부가 기능을 추가하기 위해 재귀와 기본 자료형의 기능인 | 연산자를 사용한다. 필자는 기본 자료형인 리스트와 List 모듈의 기능에 차이가 있다고 생각한다. 리스트는 시제로 데이터가 어떻게 저장되는지를 나타낸 구현일 뿐이고, List 모듈은 그 위에 추상화된 계층을 씌운 것이다. 둘 다 타입을 구현하긴 하지만 그 종류가 다르다. 예를 들어 기본 자료형인 리스트에는 flatten 함수가 없다. 구현과 연산이 분리되어 있는 것이다. 맵 또한 키와 값을 연결해 데이터를 저장하는 기본 자료형이다. 그리고 리스트와 비슷하게 맵 역시 더 풍부한 타입을 구현한 엘릭서 모듈이 따로 있다.
엘릭서의 Keyword 모듈은 키워드 리스트 타입을 제공하는데, 이 타입은 실제로 튜플의 리스트다.
options = [{:with, 72}, {:style, "light"}, {:style, "print"}]
이 역시 리스트이므로 List 모듈의 모든함수를 사용할 수 있는데, 키워드 리스트는 여기에 딕셔너리 같은 동작까지 추가된 것이다.
List.last(options)
Keyword.get_values(options, :style)
이것은 동적 객체지향 언어에서 말하는 덕 타이핑의 일종이다. Keyword 모듈은 기본 자료형이 없지만, 정해진 구조를 가진 리스트라면 무엇이든 이 모듈을 사용할 수 있다. 이는 엘릭서 컬렉션 API의 폭이 꽤 넓음을 의미한다. 키워드 리스트를 사용하면 기본 리스트 타입의 API와 List Keyword 모듈의 API를 모두 사용할 수 있다. 여기에 더해 Enum과 Collectable도 활용할 수 있는데, 바로 다음 장에서 알아보자.