HIT해

[Swift 기초문법 - 22] 별칭 typealias 본문

Swift/Swift 기초문법

[Swift 기초문법 - 22] 별칭 typealias

힛해 2024. 8. 14. 04:00
728x90

 

typealias란?

기존에 선언되어 있는 유형에 새로운 유형의 별칭을 사용함으로써

코드를 더 읽기 쉽도록, 이해하기 쉽도록 만드는 문법이다!

 

  1. 내장 유형 -> String, Int, Float
  2. 사용자 정의 유형 -> Class, Struct, Enum
  3. 복합 유형 -> Closure
  4. 프로토콜 통합

 

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으로 사용하겠다고 선언한 것을 볼 수 있다.

 

결론

나만의 이름을 붙이거나 긴 변수명, 클로저를 짧게 쓸때 사용하면 좋다