2015. 4. 15. 10:03ㆍProgramming/Scala
튜플
튜플은 List와 마찬가지로 immutable이지만 각기 다른 타입의 변수를 저장할 수 있다.
튜플에 접근하기 위해서는 _1, _2와 같이 호출을 해주어야 한다.
일관성을 강조하는 scala에서 왜 pair(0), pair(1) 이런 식으로 안만들었을까나??
apply 매소드는 항상 동일한 타입의 객체를 리턴하는 반면 튜플 같은 경우는 각기 다른 타입이 존재하기 때문에 _1은 어떤 타입, _2는 어떤 타입 이런식으로 따로 분리를 해논 것이다.
집합
immutable한 집합과 mutable한 집합 모두 만들 수 있다.
var jetSet = Set("Boeing", "Airbus")
jetSet += "Lear"
스칼라에서 따로 import를 하지 않으면 기본적으로 immutable한 집합이라고 생각한다.
위의 예제에서 보면 "Boeing"과 "Airbus"란 항목을 가진 집합을 생성하였고, 그 아래에 보면 집합에 "Lear"란 요소를 추가한 것을 볼 수 있다.
'???? 어 immutable인데 추가가 되나??'
위의 예제에서 보면 "Lear"가 추가된 새로운 집합이 jetSet으로 재 할당 된 것이다. 값이 바뀐 것이 아니라 인스턴스가 새롭게 만들어졌다.
만약 mutable한 집합 객체를 만들고 싶다면 아래와 같이 해주면 된다.
import scala.collection.mutable.Set
val jetSet = Set("Boeing", "Airbus")
jetSet += "Lear"
코드는 비슷하지만 안에서 돌아가는 동작은 확연히 다르다.
jetSet += "Lear"를 통해 새로운 집합 객체를 만든게 아니라 기존 객체에 "Lear"란 원소가 추가되었단 사실을 알아야 한다.
맵
맵 또한 아래의 그림과 같이 변경가능한 것과 변경 불가능한 것이 있다.
mutable한 맵을 만들고 싶은 경우에는 아래와 같이 한다.
import scala.collection.mutable.Map
val treasureMap = Map[Int, String]()
trasureMap += (1 -> "A")
trasureMap += (2 -> "B")
빈 맵 객체를 만든 다음 각각에 키와 value를 append하였다.
immutable한 map 객체는 다음과 같이 만들 수가 있다. (default 이기 때문에 따로 명시적으로 선언할 필요는 없다.)
val treasureMap = Map(1-> "A", 2->"B")