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으로 꼭 변환해서 사용해야 하는 것은 아니기 때문에 상황에 맞게 잘 사용하게 될 거 같다!!
참고자료
'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 |