호댕의 iOS 개발

[Swift] reverse() VS reversed() 본문

Software Engineering/Swift

[Swift] reverse() VS reversed()

호르댕댕댕 2021. 11. 13. 11:40

reverse()reversed() 메서드 모두 배열을 뒤집는 메서드들이다. 

 

🤷🏻‍♂️  그렇다면 이 둘은 어떤 차이가 있을까?

# reverse

먼저 Apple Developer 문서를 살펴보자!

reverse()에 대한 문서를 보면 이렇게 나와 있다. 

Reverses the elements of the collection in place.

collection의 요소를 그 자리에서 뒤집는다는 것이다. 

 

공식문서에선 reverse()의 시간 복잡도를 이렇게 말하고 있다. 

Complexity: O(n), where n is the number of elements in the collection.

 

그렇다면 왜 O(n)의 시간 복잡도를 갖는 것일까??

reverse() 가 어떻게 배열을 뒤집는지 그림을 보면 더욱 쉽게 이해할 수 있다. 

만약 100개의 Element를 가진 Collection이 있다고 생각해보자. 

이런 식으로 가장 첫번째 요소와 마지막 요소, 두번째 요소와 마지막에서 두번째 요소를 바꾸는 방식으로 배열을 뒤집게 된다. 

 

따라서 배열이 길어지면 길어질수록 이에 비례해서 배열을 뒤집는데 시간이 더 걸리게 된다. 

 

그래서 시간 복잡도가 O(n)이 되는 것이다. 

 

# reversed

reversed()도 먼저 Apple Developer 문서를 살펴보자!

reversed()에 대한 문서를 보면 이렇게 나와 있다. 

Returns a view presenting the elements of the collection in reverse order.

반대 순서로 View presenting을 반환한다고?

 

처음에는 이게 무슨 말인지 잘 이해가 가지 않았다. 

하지만 여기서 View를 단순히 컴파일러가 배열을 어떻게 보는지를 말한다고 생각하면 오히려 쉬워진다. 

 

즉, 배열을 단순히 뒤에서 읽는 것이다. 

 

그림으로 표현하면 다음과 같다. 

배열을 단순히 읽고 탐색하는 것은 시간복잡도가 O(1)이다. 

아무리 배열이 늘어나도 이를 읽고 탐색하는데는 시간이 동일하다는 것이다. 

 

즉, 이렇게 하게 되면 단순히 배열을 읽는 순서를 바꾼 것이기 때문에 시간복잡도가 O(1)이 되게 된다. 

 

 

참고 링크

Apple Developer | reverse()

 

Apple Developer Documentation

 

developer.apple.com

AppleDeveloper | reversed()

 

Apple Developer Documentation

 

developer.apple.com

 

Comments