HIT해
[Swift 기초문법 - 22] 별칭 typealias 본문
728x90
typealias란?
기존에 선언되어 있는 유형에 새로운 유형의 별칭을 사용함으로써
코드를 더 읽기 쉽도록, 이해하기 쉽도록 만드는 문법이다!
- 내장 유형 -> String, Int, Float
- 사용자 정의 유형 -> Class, Struct, Enum
- 복합 유형 -> Closure
- 프로토콜 통합
1. 내장 유형 예시
typealias Name = String
let name : Name = "양희태"
2. 사용자 정의 유형 예시
Class Human {
}
typealias Humans = [Human]
var humans : Humans = []
이때 Humans 라는 타입은 Array<Human>, [Human] 타입과 같은 타입이 된다.
Class 내부 변수 또는 열거형을 나타낼 수도 있다.
typealias MyType = MyClass.MY_TYPE
class MyClass {
enum MY_TYPE{
case Dog
case Cat
case Bird
}
var myType = MyType.Dog
}
var myClass = MyClass()
myClass.myType = MyClass.MY_TYPE.Dog
myClass.myType = MyType.Dog
3. 복합적인 유형에 대한 예시
Closure를 입력 매개 변수로 사용하는 함수를 typealias 를 사용하여 깔끔하게 만들 수 있다.
// completeHandler라는 Closure를 선언했을때
func base64encoding(completeHandler : (String) -> (String) {
}
// 이걸 아래와 같이 바꿀 수 있음
typealias stringHandler = (String) -> (String)
func base64encoding(completeHandler : stringHandler) {
}
실제로 사용하는 예시를 알아보자
typealias StringBlock = (String) -> Void
func sayHi(completion : StringBlock){
print("안녕하세요")
completion("오늘도 좋은 하루 되시길 바랍니다!")
}
sayHi(completion: { saying in
print("여기서 받은 :", saying)
})
출력 결과
안녕하세요
여기서 받은 : 오늘도 좋은 하루 되시길 바랍니다!
4. 프로토콜 통합
여러 프로토콜을 통합하여 가독성을 높일 수 있다.
protocol Naming {
func getName() -> String
}
protocol Aging {
func getAge() -> Int
}
typealias Friendable = Naming & Aging
typealias FullNaming = Naming // protocol 명을 Naming으로도 FullNaming으로도 부를 수 있다.
struct Friend : Friendable{
}
위와 같이 프로토콜들을 하나로 묶어서 사용할 수 있다.
원래는 아래와 같이 사용했어야 했다.
struct Friend : Naming & Aging {
func getName() -> String {
<#code#>
}
func getAge() -> Int {
<#code#>
}
}
프로젝트에서 어떻게 적용되어 있을까
Combine의 PassthriughSubject에 들어가보자
여기서 사용하는 Value의 이름을 Output으로 사용하고
Never은 Failure로 사용하겠다 라고 선언되어있다.
Alamofire에서는 클로저로서 선언되어 사용되고 있는 것을 볼 수 있다.
클로저가 길어질 경우 typealias를 사용하는 것을 볼 수 있다.
// fileprivate : 이 파일내에서만 사용하는 접근 제어자
이런 열거형일 경우 ErrorReason으로 사용하겠다고 선언한 것을 볼 수 있다.
결론
나만의 이름을 붙이거나 긴 변수명, 클로저를 짧게 쓸때 사용하면 좋다
'Swift > Swift 기초문법' 카테고리의 다른 글
[Swift 기초문법 - 24] 고차함수 Higher Order Function (0) | 2024.08.14 |
---|---|
[Swift 기초문법 - 23] lazy 키워드 (0) | 2024.08.14 |
Extenstion (0) | 2024.08.07 |
[Swift 기초문법 - 21] 프로토콜 (0) | 2024.07.16 |
[Swift 기초문법 - 20] Struct Method (0) | 2024.07.16 |