swift) typealias란?
처음 해당 키워드를 배웠을때 왜 사용하는지 몰랐지만 코드를 작성하면서 "오! 깔끔해지잖아" 했던 키워드
typealias에 대해서 공부 해보록 하겠습니다.
typealias
typealias는 쉽게 특정 타입에 이해하기 쉽게 별칭을 붙여준다라고 생각하면 쉽습니다.
기존 타입의 이름 변경
제가 이전에 진행했던 프로젝트에서 지도에 핀을 찍는 기능을 추가를 해야했습니다. 그 과정에서 CoreLocation이라는 애플에서 제공하는 기본 프레임워크를 사용했습니다. CoreLocation의 주요 기능은 위치 정보를 제공입니다. 그 과정에서 위도 경도를 CLLocationDegrees라는 타입으로 저장하게 됩니다.
공식 문서에서 해당 타입을 찾아보니 Double타입을 type alias를 했다는 것을 알 수 있습니다.
이렇게 기존의 타입을 구현하려는 기능과 관련 있는 별칭을 붙여준다면 가독성을 높일 수 있고 의도를 명확하게 할 수 있습니다.
다른 코드 예시를 보여드리겠습니다.
import Foundation
typealias Distance = Double
typealias Coordinate = (x: Double, y: Double)
//두 지점의 거리를 구하는 함수, 거리를 의미하는 Distance타입(Double) 반환
func calculateDistance(from point1: Coordinate, to point2: Coordinate) -> Distance {
let deltaX = point2.x - point1.x
let deltaY = point2.y - point1.y
return sqrt(deltaX * deltaX + deltaY * deltaY)
}
let start: Coordinate = (1.0, 2.0)
let end: Coordinate = (5.0, 6.0)
print(calculateDistance(from: start, to: end))
calculateDistance() 함수의 반환값을 Double타입을 type alias를 진행한 Distance타입을 반환합니다.
typealias를 사용함으로써 해당 함수값이 어떤 값을 반환할지 반환값의 타입을 보고 유추가 가능하게 됩니다.
복잡한 타입 간소화
제가 처음 swift에서 typealias를 사용하면 좋겠다라고 생각했을때는 코딩테스트를 준비하는 과정에서 2차원 지도에서 좌표 데이터를 저장을 하기위해..
//1) tuple 내에 두개의 정수가 존재하는 타입
let coordinate: (Int, Int)
//2) named tuple 내에 두개의 정수가 존재하는 타입, 각각의 정수는 x와 y를 의미하여 이름을 지어줌
let coordinate: (x: Int, y: Int)
//3) typealias를 통해 해당 튜플이 어떤 용도로 사용될지 암시하는 별칭 만들어줌
typealias Coordinate = (x: Int, y: Int)
let coordinate: Coordinate
첫번째 방식으로 좌표데이터(x, y)를 tuple을 이용해 한꺼번에 저장했습니다.
이후 두번째 방식은 named tuple 개념을 알게 되었고 각 정수들이 무엇을 의미하는 named tuple을 사용해서 알 수 있게 되었습니다.습니다.
하지만 타입만 봐서는 정확하게 어떤 용도로 사용될지 확신할 수 없습니다.
이때! typealias를 사용하게 되면 위에 있는 복합적으로 이루어진 타입을 별칭을 정해주면 해당 타입이 어떤 용도인지 예측할 수 있습니다.
typealias CompletionHandler<T> = (Result<T, Error>) -> Void
func fetchData(completion: CompletionHandler<Data>) {
// 비동기 작업 후 결과를 completion 핸들러에 전달
}
그 밖에도 여러 타입이 타입내에 존재하여 복잡할 수 있는 클로져의 별칭을 정해줄 수 있습니다.
코드를 짜다보면 코드의 규모가 커지고 하나 하나 의미를 정리해두지 않으면 머리에 과부하가 올것이고 문제를 해결하는데 있어 지장이 생기는것을 아는 저로서 typealias를 요긴하게 사용할 것 같습니다.
https://developer.apple.com/documentation/corelocation/cllocationdegrees
CLLocationDegrees | Apple Developer Documentation
A latitude or longitude value specified in degrees.
developer.apple.com