#### 오늘의 핵심 주제 >1. 타입 추론을 할 수 있는 경우 >2. 컴파일러에서 타입 추론이 작동하는 방식 >3. 코드의 컴파일러 오류를 이해하고 수정하는 방법 #### 타입 추론이란? ```swift let x = "hi" ``` 타입을 지정하지 않아도 할당된 값을 보고 x의 타입을 문자열로 유추할 수 있는 것 #### 스유에서 잘 쓰인다 SwiftUI 앱은 타입 추론에 크게 의존한다. 그 이유는 SwiftUI는 굉장히 많은 타입이 중첩되기 때문에 이때 추론이 없으면 코드가 너무 복잡해진다. ![](https://hackmd.io/_uploads/Skv4y_-d3.png) 위의 FilteredList 코드는 타입추론에 의존하고 있다. ![](https://hackmd.io/_uploads/HyS-WdZ_3.png) FilteredList 내부 코드를 보면 위와 같이 제너릭한 파라미터를 가지고 있다. 제너릭 타입은 컴파일러를 통해 유추할 수 있다. <타입 생략> ![](https://hackmd.io/_uploads/SJTDMub_2.png) <타입 명시> ![](https://hackmd.io/_uploads/r1J0W_Wu3.png) 위에 것이 더 깔끔해보인다. 타입 추론은 코드에서 이러한 모든 유형의 철자를 정확하게 알 필요가 없기 때문에 소스 코드를 더 빠르게 작성하는 데 도움이 된다. #### 타입 추론이 작동하는 방식 - 퍼즐을 푸는 것과 같다. → 명시적으로 주어진 정보들을 기반으로, 코드를 읽어서 빠진 부분을 채워넣는 것이다. - 제네릭 인자를 주어진 인자들을 통해서 구체 타입으로 치환해 나간다. ![](https://hackmd.io/_uploads/B1gq4dbu3.png) 1. Element 자리를 Smoothie 타입으로 변경해준다. 2. Smoothie.title이 문자열이므로 FilterKey도 String으로 변경해줄 수 있다. 3. 이런식으로 퍼즐을 맞춰나가는 것임 #### 오류 찾는 방법 - 타입 추론 중에 컴파일러는 발생하는 모든 오류에 대한 정보를 기록한다. - 그 다음 컴파일러는 타입 추론을 계속하기 위해 휴리스틱(알골이듬 인가봄)을 사용하여 오류를 수정한다. - 종종 소스 코드의 오류를 자동으로 수정하기 위한 실행 가능한 수정 사항 또는 오류를 유발할 수 있는 컴파일러가 유추한 구체적인 유형에 대한 메모를 포함한 모든 오류를 보고한다. ![](https://hackmd.io/_uploads/rycL_OWO2.png) - 이렇게 스위프트 컴파일러는 추후에 에러 메시지를 출력할 때 사용하기 위해 에러 추적 기능을 타입 추론에 통합시켰다. 컴파일러는 타입 추론을 진행하면서 직면한 에러를 기록한다. 그리고 컴파일러는 에러를 고치고 타입 추론을 계속 진행하기 위해 휴리스틱을 사용한다. - 그리고 타입 추론이 끝나면 컴파일러는 타입 추론을 진행하면서 수집한 에러를 에러 메시지(자동으로 코드를 수정할 수 있는)나 에러를 발생시킨 실제 타입에 대한 메시지와 함께 개발자에게 알린다.