본문 바로가기
Swift

[Swift] map{ Int($0)! } vs map{ Int(String($0))! }

by ykr0919 2023. 11. 18.

 

 

map { Int($0)! }와 map { Int(String($0))! } 둘 중 아무거나 사용해도 문제없고! 입력을 받을 때도 같게 받고 있는데 무엇이 다른 걸까?🤔

한번 알아보자!! 

 

보통 한 개의 숫자를 입력받는 방법은 아래와 같이 사용하고 

let N = Int(readLine()!)!

 

"1 2 3 4"와 같이 공백이 있는 숫자를 받을 때는 

 

let N = readLine()!.split(separator: " ").map{ Int($0)! }

 

이런 식으로 입력을 받아왔다. 그러다가 이것과 똑같이 사용하는데 코드가 다른 걸 보게 되었다!!!!!

 

let N = readLine()!.split(separator: " ").map{Int(String($0))!}

 

다른 점은 String으로 변환 후 Int로 다시 변환시켜 준다는 것이다. 왜?? 

 

split(separator: " ")로 인해 발생하는 배열의 각 요소 $0는 '하위 문자열'이다. '하위 문자열'은 문자열의 조각을 의미하고, map { 정수($0)! }에서 문자열의 내용이 유효한 정수(1 2 3)를 나타내면 Int로 직접 변환할 수 있다. 하지만 map {Int(String($0))!}에서는 String으로 변환한 다음 Int로 변환한다. '하위 문자열'의 내용이 유효한 정수표현(abc)이 아니더라도 런타임 충돌이 발생하지 않는다. 

 

그리고 Int($0)! 보다 Int(String($0))! 가 속도가 더 빠르다고 한다. 하위 문자열을 처리하는 것보다 String으로 Int 변환하는 것이 더욱 효율적이기 때문이다. 하지만 1만 분의 1초로 측정된 이 차이가 많이 중요하지 않는 한 굳이 String으로 꼭 변환해서 사용해야 하는 것은 아니기 때문에 상황에 맞게 잘 사용하게 될 거 같다!! 

 

 

참고자료

 

https://stackoverflow.com/questions/63601279/why-is-first-splitseparator-map-intstring0-better-than-first-sp l

 

'Swift' 카테고리의 다른 글

[Swift] forEach(_:) 알아보기  (2) 2024.02.17
[Swift] Dictionary  (2) 2024.01.01
[Swift] 삼항연산자  (2) 2023.12.29
[Swift] Array.count에서 오류가 난 이유?  (3) 2023.11.16
[Swift] Swift의 $0구문은 어떻게 나온걸까?  (0) 2023.11.06