Kotlin Set 다양한 사용법 (setOf, mutableSetOf, union, intersection, minus)

코틀린 Set에 대해서 다양한 사용 방법에 대해서 소개한다.

Set 개요

Kotlin의 Set은 Java의 Set을 기반으로 한 컬렉션이다. List와 비슷하지만, 중복되지 않는 요소만 보유하고 순서의 개념이 없다.

Set & MutableSet

Set은 읽기만 지원하는 인터페이스이다.

interface Set<out E> : Collection<E>

MutableSet은 요소의 추가 및 삭제 처리를 제공한다.

interface MutableSet<E> : Set<E>, MutableCollection<E>

Set 생성 (setOf)

불변(immutable) 세트는 Kotlin에 내장된 setOf 함수로 생성할 수 있다.

fun main() {
    var s = setOf("Red", "Green", "Blue")
    println(s)
}

Output:

[Red, Green, Blue]

간단한 예로 변경이 가능한 Set를 만들어 보도록 하겠다.
Set 생성 후 요소를 추가/제거하고 싶다면 mutableSetOf 함수로 세트를 생성해야 한다.

val set: MutableSet<Int> = mutableSetOf(1, 2, 3)
set.add(1)
set.add(4)
println(set)

Output:

[1, 2, 3, 4]

Set 중복 요소

Set 중복으로 값을 넣어보도록 하겠다.

val set: Set<Int> = setOf(1, 2, 3, 1, 2)
println(set)

Output:

[1, 2, 3]

Set은 중복되는 요소는 유지하지 않으므로, 1과 2가 하나만 저장되었다.

Set의 집합 연산 수행

Set 객체에 +- 등의 연산을 통해 합집합이나 차집합을 구할 수 있다.

합집합 (union)

+ 연산자 또는 union() 함수를 사용하여 세트 간의 합집합(두 세트에 포함된 요소로 이루어진 집합)을 구할 수 있다. union()은 infix 함수로 정의되어 있기 때문에 연산자처럼 사용할 수 있습니다.

val s1 = setOf(1, 2, 3, 4)
val s2 = setOf(3, 4, 5, 6)

println(s1 + s2) // [1, 2, 3, 4, 5, 6]
println(s1 union s2) // 동일
println(s1.union(s2)) // 동일

공통집합/적합집합 (intersection)

intersect 함수를 사용하면 두개 Set의 공통 집합(두 세트에 포함된 요소로 구성된 집합)을 구할 수 있다. intersect()는 infix 함수로 정의되어 있기 때문에 연산자처럼 사용할 수 있습니다.

val s1 = setOf(1, 2, 3, 4)
val s2 = setOf(3, 4, 5, 6)

println(s1 intersect s2) // [3, 4]
println(s1.intersect(s2)) // 동일

차집합 (difference)

- 연산자 또는 minus() 함수, subtract() 함수를 사용하여 두개 Set의 차집합(왼쪽에 지정한 세트에만 존재하는 요소로 구성된 집합)을 구할 수 있다. subtract()는 infix 함수로 정의되어 있기 때문에 연산자처럼 사용할 수 있다.

val s1 = setOf(1, 2, 3, 4)
val s2 = setOf(3, 4, 5, 6)

println(s1 - s2) // [1, 2].
println(s1.minus(s2)) // 동일
println(s1 subtract s2) // 동일
println(s1.subtract(s2)) // 동일

차집합은 좌변과 우변의 값을 바꾸면 결과가 달라진다는 점에 유의해야 한다.

println(s1 - s2) // [1, 2].
println(s2 - s1) // [5, 6].



최종 수정 : 2023-12-12