스위프트의 공식 문서에서 제네릭과 애니 타입을 각각 다음과 같이 정의하고 있다.
"Generics"(https://docs.swift.org/swift-book/LanguageGuide/Generics.html)
Generic code enables you to write flexible, reusable functions and types that can work with any type, subject to requirements that you define. You can write code that avoids duplication and expresses its intent in a clear, abstracted manner.
제네릭 코드는 특정 타입으로 동작하게 함으로써, 유연하고 재사용성이 높은 함수나 타입을 만들 수 있게 한다.
"Any Type"(https://docs.swift.org/swift-book/ReferenceManual/Types.html)
The Any type can contain values from all other types. Any can be used as the concrete type for an instance of any of the following types:
- A class, structure, or enumeration
- A metatype, such as Int.self
- A tuple with any types of components
- A closure or function type
애니 타입은 모든 타입의 값들을 포함할 수 있다. 애니는 아래 타입들의 인스턴스에 대한 구체적인 타입으로 사용될 수 있다.
- 클래스, 구조체, 열거형
- 메타 타입
- 튜플
- 클로저 또는 함수
인터넷이나 책에서 제네릭과 애니 타입이 많이 비교되기도 하는데(사실 제네릭은 언어가 제공하는 특징이고 애니 타입은 타입의 일종이므로 비교 자체가 성립이 안될 수도 있음에도), 제네릭의 정의 중 "특정 타입"과 애니 타입의 정의 중 "모든 타입"을 보면 그 차이가 명백히 드러난다. 그렇다 제네릭은 타입을 한정할 때 사용되고, 애니 타입은 모든 타입을 임의로 사용하기 위해 사용된다.
따라서 제네릭 기반으로 생성된 타입은 타입이 "특정 타입"으로 정해져 있기 때문에 안전하게 사용할 수 가 있는 반면, 애니 타입은 아래와 같이 접근할 때마다, 타입 캐스팅을 해줘야하는 번거로움과 위험이 따른다.
let mixed: [Any] = ["one", 2, true, (4, 5.3), { () -> Int in return 6 }]
if let first = mixed.first as? String {
print("The first item, '\(first)', is a string.")
}
// Prints "The first item, 'one', is a string."
'프로그래밍 > Swift' 카테고리의 다른 글
접근 수준 활용하여 프레임워크 만들기 (0) | 2021.06.17 |
---|---|
[Swift] 유니코드와 숫자 간의 변환 (0) | 2021.06.12 |
Swift에서 Framework 생성 및 사용 (0) | 2021.05.29 |
저장 속성(Stored Properties), 계산 속성(Computed Properties) (0) | 2020.10.28 |