서론
악명이 높은지는 모르겠지만 스칼라의 List 연산자는 악명이 높아야 합니다. 매우 더럽게 생겼고 복잡하고 연산자 오버로딩이 되는 메소드라서 .
으로 함수 호출하듯 사용하면
또 결과가 바뀝니다. 그래서 정리합니다.
본론으로 들어가기 전에 이 글의 예제는 scala의 공식문서를 많이 발취했음을 밝힙니다.
https://www.scala-lang.org/api/current/scala/collection/immutable/List.html
List 엄청 간단한 소개
List
에도 여러 종류가 있지만 일반적으로 각각의 노드들로 이루어져 있고 노드가 서로 연결된 시퀀스입니다.
출처: http://www.epnc.co.kr/news/articleView.html?idxno=45353
C를 처음 배울 때 많이 구현하는 자료형으로 배열처럼 많이 사용하지만 다른 것 입니다. 리스트는 배열과 다르게 메모리만 충분하다면 계속 동적으로 노드를 이어 붙일 수 있습니다
이 글의 주 독자는 이미 리스트에 대해 어느정도 알고 있을 것이기에 여기까지 설명하고 넘어가겠습니다.
(리스트를 모르면 스칼라 이전에 자료구조와 Java, C 같은 언어를 먼저 공부하세요 List 모르면 코딩 못합니다.)
연산자, 메소드 정리
++
++
은 리스트 두 개를 합치는 메소드입니다.
::
::는
값 뒤에 리스트를 연결할 때 사용합니다. 주의할 점으로 .::
로 호출하면 결과가 반대로 됩니다.
주로 패턴매치에서 많이 사용합니다.
:::
:::
도 ::
와 비슷하지만 다른점은 값 + 리스트
연산이 아니라 리스트 + 리스트
연산을 합니다
.:: .::: 메소드로 호출하면?
위의 두가지 ::
, :::
연산자는 참 신기하게 .::
, .:::
와 반대로 호출합니다.
예를 들자면 1,2 3,4 가 되야될게 .
으로 호출하면 그 반대로 3,4,1,2 순서로 들어갑니다. 주의하세요 ㅠㅠ
의미 없는 연산자들
++:
+:
기타 함수들
take
: 인자 n 번째를 가저온다tail
: 리스트 마지막 값을 가저온다head
: 리스트 제일 첫 번째 값을 가져온다sum
: 합계indexOf
: 인자의 값이 몇 번째에 들어있는지 int로 돌려준다.isEmpty
: 비어있면 true 아니면 flase
고차 함수들
리스트의 수 많은 고차 함수들에 대해서는 전편인 고차 함수편을 참고해주세요 20개에 가까운 고차함수들을 소개했고 그 중 많이 쓰이는 열 개 이상은 쓸만한 예제와 설명이 달려있습니다.
뒷담
스칼라의 리스트는 뭔 크리링 머리의 점 같은 연산자로 계산합니다. 괜히 스칼라 진입 장벽을 높이는 안 좋은 원인 중 하나라고 생각합니다
이 글을 읽으면서 알아둘 점으로는 이 글의 리스트는 수정이 불가능한 리스트입니다. 특정 값을 합친 새로운 리스트를 리턴하지 기존의 리스트를 수정하는건 아니란 것을 알아두세요