티스토리 뷰

반응형

 

 

 

Generic Argument  Clause
swift 제네릭 문법 인자 항

swift 제네릭 인자 절은 제네릭 타입의 타입 인자들을 구체화합니다. 제네릭 인자 절은 <> 꺽쇠 블럭 내에 감싸인 형태로 정의가 되는데, 그 형태의 예시는 아래와 같습니다.

<{Generic argument list}>

<> 꺽쇠 블럭 내에는 여러개의 제네릭 타입 인자, 제네릭 인자 리스트(Generic argument list) 형태로 정의할 수도 있는데 이때 각 제네릭 타입은 ',' 로 구분되어집니다. 이렇게 정의된 타입 인자에는 해당 타입의 제네릭 인자 절안에 들어가는 타입 인자들은 제네릭 인자 절 내에 정의된 타입에 맞는 구체적 형식의 타입입니다.

위 Dictionary 구조체 코드를 통해 Swift 표준 라이브러리의 제네릭 Dictinoary 자료구조 타입의 기본 버전을 볼 수 있습니다. Dictinoary는 Hashable 프로토콜을 채택한 Key, 그리고 Value타입을 제네릭 인자로 갖고 있습니다.

 

 

 

 

Swift 표준 라이브러리에 정의되어 있는 Dictionary 기본 구현체를 특수 형태로서 Dictionary<String, Int> 등으로 사용할 수 있습니다. 이렇게 제네릭인자를 갖는 구조체를 생성할때는 각각의 제네릭 인자가 기본 정의부에서 정의한 제네릭 타입을 준수하는 타입으로 넣어줘야합니다.

 예를들어 Dictinoary<String, Int>() 와 같이 자료구조를 사용하는 것은 가능한데, String은 Hashable 프로토콜을 준수하며, Int타입 또한 Value타입을 준수하기 떄문입니다. 다시한번 말하자면, 각각의 제네릭 절에 대체되어 사용되는 타입을 각각 정의된 제네릭 리스트 절 순서에 맞는 제약을 만족시켜야합니다. 예를들자면 Dictionary<Hashable, Value> 의 경우 첫번째는 Hashable을, 두번째는 Value를 충족하는 타입으로 대체되어야 합니다.

  정의된 제약을 충족할 수만 있다면, 제네릭 인자타입에 정의된 타입 자기자신을 넣어서 사용할 수도 있습니다. 예를들어, Array<Element>의 경우, Element 제네릭타입을 충족하는 타입이 들어갈 수 있는데, Array<Int> 타입은 Element 타입을 충족하므로, Array<Array<Int>>와 같이 사용될 수 있습니다.

 

 

 

 

Generic Parameter Clause 파트에서 언급했듯이, 제네릭 함수나 생성자 등을 사용 시에 <> 꺽쇠와 같은 제네릭 인자 절을 명시할 필요가 없습니다. 일반 함수와 같이 인자를 넣어 사용하면 인자 타입을 자동으로 추론하여 함수를 실행합니다.

 

 

 

반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함