[Learning Scala] Chapter6. 보편적인 컬렉션 (1)
포스트
취소

[Learning Scala] Chapter6. 보편적인 컬렉션 (1)

이 글은 러닝 스칼라를 기반으로 작성 되었습니다.

출처 : https://jpub.tistory.com/677

스칼라는 JVM 기반 언어이므로 기본적으로 자바 컬렉션이 사용이 가능합니다.

하지만 추가적으로 스칼라만의 다양한 고차 연산도 있있습니다.

대부분 Iterable의 서브타입이고 컬렉션 데이터를 처리하는 메소드들을 제공합니다.

List

List는 불변의 단방향 연결 리스트입니다.

List를 가볍게 아래와 같이 사용해 볼 수 입습니다.

1
2
3
4
5
6
7
8
val list: List[Int] = List(11, 30, 10, 21) // List.apply(11, 30, 10, 21)

println(s"list size : ${list.size}, list : $list") // list size : 4, list : List(11, 30, 10, 21)

println(list(1)) // 30
println(list.head) // 11
println(list.last) // 21
println(list.tail) // List(30, 10, 21)

List를 루프(loop)로 사용하기

앞에서 공부한 for 문을 사용하여 List를 루핑할 수 있습니다.

1
2
3
4
5
6
7
8
val list: List[Int] = List(11, 30, 10, 21) // List.apply(11, 30, 10, 21)

var total = 0
for (i <- list) {
  total += i
}

println(total) // 72

고차함수 사용하기

List 외에 다른 컬렉션에서도 사용 가능한 고차 함수를 아래 예제처럼 적용할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
val list = List("hello", "world", "scala")

// foreach: 프로시저를 받아서 리스트의 모든 요소에서 호출 시킨다.
list.foreach((s: String) => print(s"$s,")) // hello,world,scala,
list.foreach { s => print(s"$s,") } // hello,world,scala,

// map: 리스트의 모든 요소을 다른 값이나 타입으로 전환하는 함수를 받는다.
list.map((s: String) => s.length) // List(5, 5, 5)
list.map { s => s.length } // List(5, 5, 5)

// reduce: 리스트 요소들를 단일 항목으로 결합한다.
val data = list.reduce((s1: String, s2: String) => {
  println(s"($s1, $s2)")
  s1 + s2
})
println(data) // helloworldscala

// 위 reduce 동작 순서
// (hello, world)
// (helloworld, scala)

Set

Set은 각 요소들이 유일하고 순서가 없는 컬렉션이며 동작은 List와 유사합니다.

1
2
3
4
val data = Set(10, 20, 30, 20, 10)

println(data) // Set(10, 20, 30)=
println(data.reduce((a: Int, b: Int) => a + b)) // 60 (sum과 동일하게 동작)

Map

Map은 불변의 키-값 저장소이며 키-값 쌍을 Tuple로 기술하면 되며 관계 연산자(->)를 사용할 수 있습니다.

Map 또한 Iterable의 서브 타입 이므로 List와 동일한 연산을 지원합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
val rgbMap = Map(
  "red" -> 0xff0000,
  "green" -> 0xff00,
  "blue" -> 0xff
)

rgbMap("red") // 16711680
rgbMap("green") | rgbMap("blue") // 65535
rgbMap.contains("black") // false

rgbMap.foreach(pair => println(pair))
// (red,16711680)
// (green,65280)
// (blue,255)

지금까지 이렇게 기본적인 컬렉션인 List, Set, Map에 대해 간단히 알아보았습니다.

이런 컬렉션들로 어떤 작업을 할 수 있는지는 다음 포스팅에서 알아보겠습니다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

[Learning Scala] Chapter5. 일급 함수

[Learning Scala] Chapter6. 보편적인 컬렉션 (2)