8. Swift 타입 별칭(typealias) & 튜플(Tuple)
스위프트의 타입 추론은 지난번 포스팅에서 살짝 언급을 했기 때문에 패스하고 타입 별칭에 대한 이해를 돕고자 정리해본다.
기본으로 제공하는 데이터 타입이든, 사용자가 임의로 만든 데이터 타입이든 이미 존재하는 데이터 타입에 임의로 다른 이름(별칭)을 부여할 수 있다.
책에서 설명하는 타입 별칭은 너무 간단하다. 실무에서 접했던 typealias는 함수까지도 포함되는 것 같다.
typealias MyInt = Int
typealias YourInt = int
let age: MyInt = 100
let year: YourInt = 2000
year = age // 같은 타입으로 취급된다.
실무에서 사용한 typealias의 경우, 네트워크 통신 결과를 받기 위해 정의해서 사용한 경우였다.
typealias Completion = (JSON?, Error?) -> Void
와 같은 방식으로 선언하고 completionHandler로 @escaping Completion을 사용하는 형태였다. 대략 콜백 리스너로 사용되는 방식인듯하다.
다음은 튜플이다.
튜플(Tuple)은 타입의 이름이 따로 지정되어 있지 않은, 사용자(프로그래머) 정의 타입이다. 지정된 데이터의 묶음이라고 해서 C언어의 원시 구조체의 형태와 유사하다.
튜플에는 별칭을 사용하는 방식과 사용하지 않는 방식이 있는데 대체적으로 별칭을 사용하는 것이 값에 접근하기가 더 수월하다.
let mathGrade = (name: "Min", grade: 100)
print("\(mathGrade.name) - \(mathGrade.grade)")
별칭을 사용하므로 튜플을 분리하는 단계를 생략하고 튜플 내부의 정보에 접근하는데 이름을 사용할 수 있다.
애플에서 이야기하는 튜플의 사용 용도는 함수에서 여러 값을 반환하는 경우 튜플을 함수의 반환 타입으로 사용할 수 있다고 안내하고 있다.
예전 자바스크립트의 함수에서 리턴할 때 object형태로 json을 리턴했던 적이 있는데 아마도 유사한 개념이다.
자바스크립트 함수에서도 객체를 리턴할 테 다음 과 같은 형식으로 리턴이 가능하다.
function() {
return {"x" : 100, "y" : 100}
}
스위프트 함수에서 튜플를 리턴하는 예제 코드를 보자
func calculateTip(billAmount: Double, tipPercent: Double) -> (tipAmount: Double, totalAmount:Double) {
let tip = billAmount * (tipPercent / 100)
let total = billAmount + tip
return (tipAmount: tip, totalAmount: total)
}
var tip = calculateTip(billAmount:31.98, tipPercent: 20)
print("\(tip.tipAmount) - \(tip.totalAmount)")
튜플은 임의의 컬렉션 값을 전달해야 하는 경우 매우 유용하다. 스위프트에서 튜플은 값 타입이면서 복합 타입이기도 하다. typealias키워드를 사용하면 튜플에 별칭을 부여할 수 있다.
typealias myTuple = (tipAmount:Double, totalAmount: Double)
'프로그래밍 > Spring' 카테고리의 다른 글
10. Swift 열거형(enum) (0) | 2019.02.17 |
---|---|
9. Swift의 배열(Array)과 딕셔너리(Dictionary) 그리고 세트(Set) (0) | 2019.02.16 |
7. Swift Any, AnyObject & nil (0) | 2019.02.14 |
6. 스위프트 변수와 상수 (0) | 2019.02.13 |
5. 스위프트의 문자열 보간법 (0) | 2019.02.13 |