We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
코드를 보다보면 함수과 같이 <>로 감싸진 형태를 쉽게 찾아볼 수 있다. 이때 T는 타입 파라미터로 어떤 타입의 ‘이름'을 의미한다.
func swap<T>(_ a: inout T, _ b: inout T) { let temp = a a = b b = temp }
말그대로 어떤 ‘타입’ 을 의미하기 때문에 컴파일 과정에서 해당 타입이 어떤 타입인지 결정되지 않고 런타임 과정에서 타입을 결정한다
예를 들어서, C++ STL에 있는 Stack을 구현한다면 아래와 같이 제네릭 타입을 이용해서 타입에 무관한 Stack을 만들 수 있다.
struct Stack<T> { var items = [T]() mutating func push(item: T) { items.append(item) } mutating func pop() -> T { return items.removeLast() } }
아래와 같은 형태는
struct TextFieldCustomViewWrapper<KeyboardView: View>: UIViewRepresentable { }
KeyboardView 라는 타입파라미터를 사용하는데 KeyboardView는 View 프로토콜을 채택하고 있는 어떤 타입
을 의미한다. 이렇게 특정 프로토콜을 준수해야만 제네릭을 사용할 수 있도록 타입 제약을 줄 수 있다.
Swift 의 Dictionary 구조체를 들여다 보면 아래와 같이 타입 제약이 걸려있는 것을 확인할 수 있다.
@frozen struct Dictionary<Key, Value> where Key : Hashable
즉 Key가 Hashable 프로토콜을 채택하는 타입인 경우에만 사용할 수 있도록 제약이 걸려있다.
protocol Publisher { associatedtype Output associatedtype Failure : Error func receive<S>(subscriber: S) where S : Subscriber, Self.Failure == S.Failure, Self.Output == S.Input }
프로토콜을 보다보면 associatedType이라는 키워드를 볼 수 있다. associated Type 이니까 우리가 일반적으로 생각하는 Type임을 유추할 수 있다.
Type
예시와 함께 보면 어떤 의미를 가지는지 알 수 있다.
protocol BranProtocol { associatedtype MyType var name: MyType { get } } struct Bran: BranProtocol { var name: String { return "Sangwon" } }
BranProtocol을 채택하면 MyType의 name을 정의해야 하는데 String 타입이외에도 다른 다양한 타입의 name이 될 수 있는 가능성이 있을 때 위와 같이 associatedtype을 사용할 수 있다.
(프로토콜에서 사용하는 제네릭 타입으로 생각!)
위의 제네릭에서 봤던 예제와 마찬가지로 연관타입에도 프로토콜을 통해서 제약을 줄 수 있다.
The text was updated successfully, but these errors were encountered:
No branches or pull requests
제네릭 타입
Type Parameter
코드를 보다보면 함수과 같이 <>로 감싸진 형태를 쉽게 찾아볼 수 있다. 이때 T는 타입 파라미터로 어떤 타입의 ‘이름'을 의미한다.
말그대로 어떤 ‘타입’ 을 의미하기 때문에 컴파일 과정에서 해당 타입이 어떤 타입인지 결정되지 않고 런타임 과정에서 타입을 결정한다
예를 들어서, C++ STL에 있는 Stack을 구현한다면 아래와 같이 제네릭 타입을 이용해서 타입에 무관한 Stack을 만들 수 있다.
Type Constraint
아래와 같은 형태는
KeyboardView 라는 타입파라미터를 사용하는데 KeyboardView는 View 프로토콜을 채택하고 있는 어떤 타입
을 의미한다. 이렇게 특정 프로토콜을 준수해야만 제네릭을 사용할 수 있도록 타입 제약을 줄 수 있다.
Swift 의 Dictionary 구조체를 들여다 보면 아래와 같이 타입 제약이 걸려있는 것을 확인할 수 있다.
즉 Key가 Hashable 프로토콜을 채택하는 타입인 경우에만 사용할 수 있도록 제약이 걸려있다.
Associated Type
프로토콜을 보다보면 associatedType이라는 키워드를 볼 수 있다. associated
Type
이니까 우리가 일반적으로 생각하는 Type임을 유추할 수 있다.예시와 함께 보면 어떤 의미를 가지는지 알 수 있다.
BranProtocol을 채택하면 MyType의 name을 정의해야 하는데 String 타입이외에도 다른 다양한 타입의 name이 될 수 있는 가능성이 있을 때 위와 같이 associatedtype을 사용할 수 있다.
(프로토콜에서 사용하는 제네릭 타입으로 생각!)
위의 제네릭에서 봤던 예제와 마찬가지로 연관타입에도 프로토콜을 통해서 제약을 줄 수 있다.
The text was updated successfully, but these errors were encountered: