코린이 탈출기

kotlin - shuffle() vs shuffled() 본문

코틀린

kotlin - shuffle() vs shuffled()

50HEE 2022. 7. 4. 00:57

shuffle()과 shuffled()는 리스트의 값들을 섞고 싶은 경우 사용하는 것입니다.

 

밑의 사진과 코드는 shuffle()과 shuffled()의 코드입니다.

코드를 보며 설명한 후 사용 예시를 작성하겠습니다.

shuffle()
shuffled()

/**
 * Randomly shuffles elements in this mutable list.
 */
@kotlin.internal.InlineOnly
@SinceKotlin("1.2")
public actual inline fun <T> MutableList<T>.shuffle() {
    java.util.Collections.shuffle(this)
}


/**
 * Returns a new list with the elements of this list randomly shuffled.
 */
@SinceKotlin("1.2")
public actual fun <T> Iterable<T>.shuffled(): List<T> = toMutableList().apply { shuffle() }

 

 

shuffle()

  • shuffle()의 경우에는 MutableList에서만 가능합니다. 그 이유는 리스트의 순서를 바꾸는 것이 결국 리스트의 값들을 바꾸는 것과 같기 때문에 MutableList를 사용하는 것입니다.
  • shuffle()은 단지 리스트를 섞는 것이기 때문에 List를 반환하지는 않습니다. 다르게 표현하자면 섞는다는 행위를 하는 것입니다.

 

shuffled()

  • shuffled()의 경우에는 MutableList의 상위 클래스인 Iterable에서 사용이 가능합니다. 즉, shuffled()를 사용할 경우 MutableList 외에서도 사용이 가능한 것입니다. shuffled() 자체가 toMutableList()를 통해 스스로 바꾸기 때문입니다.
  • shuffled()는 shuffle()과 달리 List를 반환합니다. 이는 list를 shuffle()란 결과를 새로운 리스트로 반환한다는 것과 같습니다.

 

 

 

사용법

// shuffle() 예시
val defaultMutabletList = mutableListOfp(1,2,3)

defaultMutabletList.shuffle()
print(defaultMutabletList)

// shuffled() 예시
val defaultList = listOf(1,2,3)

print(defaultList.shuffled())

shuffle()을 사용하기 위해 mutableList 타입인 defaultMutableList를 생성했습니다.

shuffle()의 경우에는 위에서 말한 것처럼 섞는 행위만 하는 것이어서 섞인 리스트를 부르고 싶을 경우에는 기존 리스트를 호출하면 됩니다. 이 말은 기존 리스트의 값들을 섞기 때문에 기존 리스트는 처음 가지도 있는 순서가 더 이상 아니라는 것입니다.

 

반면 shuffled()의 경우에는 List 타입의 defaultList를 생성했습니다.

shuffled()는 list를 반환하기 때문에 shuffled()를 바로 사용할 수 있습니다. 그리고 이는 위에서 설명한 것과 같이 새로운 리스트를 만드는 것과 같기 때문에  기존 리스트의 값은 유지됩니다.

 

 

 

위와 같은 특징을 잘 생각하고 각 상황에 맞게 사용하시면 됩니다!

'코틀린' 카테고리의 다른 글

kotlin - Enum class의 메모리  (1) 2024.02.08
표현식 vs 구문  (0) 2022.03.24
Comments