본문 바로가기
language/Scala

[Scala] 스칼라 배우기 6. 스칼라 기본 문법5(collection,배열,리스트,튜플,맵)

by 스파이디웹 2023. 6. 11.
728x90

Collection

배열(array)

길이가 고정된 고정된 자료구조(값을 변경 할 수 있는 순서가 정해진 시퀀스)

val array1 = Array(1, 2, 3)

// 배열의 데이터 접근 
scala> array1(0)
res0: Int = 1

// 배열의 데이터 변경 
scala> array1(1) = 10
scala> array1(1)
res5: Int = 10

val array2 = Array(3, 4, 5)

// 배열 연결하기 ++
val array3 = array1 ++ array2

// 배열의 앞에 데이터 추가 
val array4 = 0 +: array3

// 배열의 뒤에 데이터 추가 
val array5 = array3 :+ 100

리스트(list)

가변적인 길이의 데이터를 저장하기 위한 자료구조(값을 변경 할 수 없는 순서가 정해진 시퀀스)

val list1 = List(10, 20, 30, 40)
val list2 = (1 to 100).toList
val list3 = array1.toList

scala> list1
res19: List[Int] = List(10, 20, 30, 40)

scala> list1(0)
res11: Int = 10

scala> list1(3)
res12: Int = 40

scala> list1.head
res17: Int = 10

scala> list1.tail
res18: List[Int] = List(20, 30, 40)

집합(Set)

  • 중복을 허용하지 않는 자료 구조
  • 전달된 값이 존재하는지 여부를 반환
val s1 = Set(1, 1, 2)

scala> s1
res23: scala.collection.immutable.Set[Int] = Set(1, 2)

// 셋은 전달된 값이 존재하는지 여부를 반환 
scala> s1(1)
res26: Boolean = true

scala> s1(2)
res27: Boolean = true

scala> s1(3)
res28: Boolean = false

튜플(tuple)

  • 불변의 데이터를 저장하는 자료구조
  • 여러가지 값을 저장할 수 있음
  • 값에 접근할 때는 _1, _2와 같은 형태로 접근
// 튜플 선언 
val hostPort = ("localhost", 80)

scala> hostPort._1
res29: String = localhost


// 패턴매칭 선언 
def matchTest(hostPort:(String, Int)) = hostPort match {
  case ("localhost", port) =>  println(s"localhost, $port")
  case (host, port) => println(s"$host, $port")
}

val hostPort1 = ("localhost", 80)
val hostPort2 = ("localhost", 8080)
val hostPort3 = ("127.0.0.1", 8080)

scala> matchTest(hostPort1)
localhost, 80

scala> matchTest(hostPort2)
localhost, 8080

scala> matchTest(hostPort3)
127.0.0.1, 8080

맵(Map)

  • 사전 형식(key:value)으로 데이터를 저장하는 구조
  • 맵의 데이터를 반환하면 Option 타입을 반환
  • get을 이용하여 데이터를 반환하기 보다는, getOrElse를 이용하거나, get의 반환값 Option을 패턴매칭을 이용하는 것이 좋음
val map1 = Map(1 -> 2)
val map2 = Map("foo" -> "bar")

// Option 타입 반환 
scala> map1.get(1)
res43: Option[Int] = Some(2)

// getOrElse를 이용하여 키와 일치하는 데이터가 없으면 기본값을 반환하도록 설정 
scala> map1.getOrElse(1, 0)
res41: Int = 2

scala> map1.getOrElse(10, 0)
res45: Int = 0

scala collection 계층구조

 

728x90

댓글