[TIL] 프로그래머스: 문자열 정렬하기 (2) 풀다가..

Eden·2024년 12월 21일
1

TIL

목록 보기
73/92
post-thumbnail

프로그래머스: 문자열 정렬하기 (2)

처음에는 가볍게 깃허브 잔디 심기 위해서 얼른 풀 생각이었는데,,,,

처음 쓴 코드

import Foundation

func solution(_ my_string:String) -> String {
    return my_string.lowercased().sorted()
}

이렇게 풀었는데

이렇게 혼나버렸다.

바로 타입 변환이 필요하다는 것을 깨닫고

최종 코드

import Foundation

func solution(_ my_string:String) -> String {
    return String(my_string.lowercased().sorted())
}

이렇게 변환해서 성공적으로 잔디를 심을 수 있었다.

그런데 말입니다.

이렇게 쉬운 문제를 별다른 고민없이 성공했다고 생각한 것이 좀 짜증났다.

사실 Swift의 특성을 잘 이해하고 있었으면, 이런 실수는 절대 하지 않았을 것이다.
String으로 감싸야하는 상황은 주로 반환 타입이 명확히 지정되어 있을 때, 결과 값의 타임이 다를 경우에 발생한다.
이 문제에서 String(my_string.lowercased().sorted()) 이렇게 해야했던 이유는 sorted() 메서드가 반환하는 값이 Array<Character> 타입이기 때문이다. 그래서 문자열로 변환하기 위해서 String()으로 감싸주어야 했던 것이다.

언제 타입으로 감싸야 할지 판단하는 방법

함수 반환 타입을 확인하기

함수의 선언부에 명시된 반환 타입과 실제 결과값의 타입이 다른 경우, 변환이 필요하다.

func example() -> String {
    let array: [Character] = ["a", "b", "c"]
    return String(array) // 반환 타입에 맞추기 위해 String으로 변환
}

Swift 컴파일러 에러 메시지 읽기

에러 메시지가 "Cannot convert value of type 'X' to expected argument type 'Y'"와 같은 형식이라면, X 타입을 Y 타입으로 변환해야 한다는 뜻이다. 하지만 에러를 발견하기 전에 처음부터 정확히 설계하는 것이 중요할 것 같다.

타입 추론이 실패할 때

타입 추론이 어려운 경우 명시적으로 변환해야 한다.

let numbers = [1, 2, 3]
let stringRepresentation = String(numbers) // 오류: 배열은 문자열로 직접 변환할 수 없음

교훈

  • 문제에서 요구하는 반환 타입을 항상 확인하자.
  • Swift 함수가 반환하는 타입을 명확히 이해하자.
  • 에러 메시지를 읽고, 타입 변환이 필요하다는 힌트를 얻자.
profile
Frontend🌐 and iOS

0개의 댓글