본문 바로가기
Programming/Scala

[3강] 튜플, 집합과 맵

by 유주원 2015. 4. 15.

튜플


튜플은 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")