Typealias 란
Typealias는 기존에 존재하는 데이터 타입에 새로운 이름을 붙일 수 있는 기능이다.
typealias가 정의되면, 프로그램에 존재하는 타입 대신 다른 이름을 사용할 수 있다.
새로운 타입을 생성하는 것이 아닌 원래 존재하는 타입의 이름만을 바꾼다.
코드를 더 읽기 쉽고 명확하게 만든 것에 목적을 두고 있다.
즉 typealias는 수학의 치환과 같은 논리이다.
(+)
AssociatedType과 typealias는 상당히 비슷해보인다.
필자 역시 같은 고민을 겪었으나, 이 둘은 다르다고 말할 수 있다.
이 둘의 차이점을 보기전 AssociatedType을 간단하게 살펴보자.
AssociatedType는 타입을 대신(지정)해서 사용할 수 있다.
AssociatedType는 Equatable를 준수하는 곳에만 사용될 수 있으며 프로토콜에서 사용된다.
즉, AssociatedType는 타입을 담는 곳이고, typealias는 변수를 담는 곳이라고 말할 수 있다.
TypeAlias를 생성하는 방법
typealias name = existing type
Swift에서 typealias는 대부분 타입에 사용할 수 있다.
- Built-in types (String, Int, Float)
- User-defined types (class, struct, enum)
- Complex types (closures)
Built-in types의 Typealias
String, Int, Float 와 같은 데이터 타입에 사용되는 typealias
typealias Name = String
이름을 String 형태로 정의합니다. 명확한 코드를 위해 이렇게 사용할 수 있다.
let studentName : Name = "Jack"
// let studentName : String = "Jack"
아래 주석과 위의 변수는 같은 의미를 지진다.
User-defined types 의 Typealias
class, struct, enum 이 있는 User-defined types
class Student {
}
var student : Array<Student> = []
typealias 로 이렇게 바꿀 수 있다.
typealias SchoolStudent = Array<Student>
var students : SchoolStudent = []
Complex types 의 typealias
클로저에 대한 예제다.
func method(handler:(Int) -> (String)) {
}
이 함수에 typealias를 이렇게 사용할 수 있다.
typealias CompletionHandler = (Int) -> (String)
func method(handler : CompletionHandler){
}
typealias 예시
// 학생 클래스
class Student {
var studentName : String
init(studentName : String) {
self.studentName = studentName
}
}
// 과목 클래스
class Subject {
var className : String
init(className: String) {
self.className = className
}
}
// 시간표 클래스
class TimeTable {
var student : Student
var subject : Subject
init(student : Student, subject: Subject){
self.student = student
self.subject = subject
}
}
활용할 typealias 를 만들어줍니다.
typealias Class = (
student : Student,
subject : Subject
)
반복해서 사용할 변수를 선언합니다.
let Jack = Student(studentName: "Jack Ripper")
let Math = Subject(className: "Math Class")
클래스를 사용할 경우와 typealias 를 사용한 경우
// 클래스를 사용한 경우
let FirstClass = TimeTable(student : Jack, subject: Math)
// FirstClass.student.studentName = Jack
// FirstClass.subject.className = Math
// typealias를 사용한 경우
let SecondClass = Class(Jack, Math)
// SecondClass.student.studentName = Jack
// SecondClass.subject.className = Math
간단 요약 : typealis는 별명이다.
'개발 > Swift' 카테고리의 다른 글
[Swift] NSAttributedString (0) | 2021.02.25 |
---|---|
[Swift] 문자열 색인 (0) | 2021.02.25 |
[Swift] Protocol 알아보기 (0) | 2021.02.25 |
[Swift] 프로토콜 지향 프로그래밍 (0) | 2020.08.13 |
[Swift] Protocol (0) | 2020.03.08 |