스칼라의 목적은 프로그래머들이 함수형 스타일과 명령형 스타일의 장점을 모두 취할 수 있게 돕는 것이다. 이를 위해 스칼라 컬렉션 라이브러리에서 변경 가능한 컬렉션과 변경 불가능한 컬렉션을 구분해둔 곳이 있다. 예를 들어, 배열은 항상 변경 가능하지만 리스트는 항상 변경 불가능하다. 하지만 집합이나 맵에 대해서는 변경 가능한 것과 변경 불가능한 것을 모두 제공한다. 다만, 두 버전 모두 동일한 간단한 이름을 사용한다. 집합이나 맵 모두 스칼라에서는 클래스 계층 안에서 변경 가능성을 모델링한다.
집합
스칼라에는 집합을 위한 기반 트레이트(trait)가 있다. 그리고 이것을 상속하는 두개의 서브트레이트가 있는데, 하나는 변경가능한 집합, 다른 하나는 변경 불가능한 집합을 위한 것이다.
scala.collection.Set -> scala.collection.immutable.Set -> scala.collection.immutable.HashSet
scala.collection.Set -> scala.collection.mutable.Set -> scala.collection.mutable.HashSet
다음은 변경불가능한 집합을 만들고, 초기화하고, 사용하는 예제이다.
위 코드의 jetSet += "Lear"에서
변경불가능한 집합의 예제라면서 변경한게 아니냐 할수 있지만, 사실은
jetSet = jetSet + "Lear"로 새로운 집합으로 재할당한 것이다.
변경가능한 집합은 import로 가져온다.
import scala.collection.mutable은 변경 가능한 집합을 임포트한다.
movieSet += "Shrek"은 movieSet.+=("Shrek") 으로 바꿀 수 있다.
맵
scala.collection.Map -> scala.collection.immutable.Map -> scala.collection.immutable.HashMap
scala.collection.Map -> scala.collection.mutable.Map -> scala.collection.mutable.HashMap
맵도 집합과 마찬가지로 변경불가능한 트레이트, 변경가능한 트레이트를 제공한다.
다음은 변경불가능한 맵 예제이다.