Swift 공식문서 읽기...Day21

김민종·2021년 9월 8일
0

Swift Doc

목록 보기
21/26

Generics

지네릭 코드는 유연하고 재사용이 가능하고 어떤 타입에서든 사용이 가능하다. 이는 코드의 중복을 피하고 정확한 의도를 나타낼 수 있다. 지네릭은 스위프트의 가장 강력한 특징 중 하나이다. 스위프트를 사용하면서 알게모르게 지나쳤던 array, dictionary모두 지네릭 코드이다.

Generic Functions
지네릭 함수를 보면 공식문서의 예시에 플레이스홀더 "<\T>"를 넣어 타입을 명시하지 않고 그저 같다는 것만 확인시킨다. 그후 값을 변환하는 함수를 실행시키면 타입에 상관없이 값이 변환되는 것을 확인할 수 있다.

Type Parameters
위의 예시와 같이 T는 그저 예시에 불과하다. 타입파라미터는 플레이스 홀더 타입의 이름을 명시하고 함수명 바로 뒤에 적어준다. 그리고 복수의 타입 파라미터를 사용할 땐 콤마로 구분해 준다.

Naming Type Parameters
딕셔너리와 같이 키와 값의 상관관계가 있을 때는 의미가 있는 파라미터명을 붙혀 주지만 그렇지않을 때는 T,U,V와 같은 단일 문자를 붙혀준다.

Generic Types
스위프트에서 사용하는 지네릭 타입 중 스택에 대해 알아보자면 스택은 조금 더 제한 된 배열과 비슷하다. 특징은 데이터를 이전 데이터의 마지막에 쌓는다는 개념으로 접근하고 뺴낼때도 마찬가지로 가장 마지막으로 있는 값부터 뺄 수있다. 이를 push() 그리고 pop()으로 표현한다. 그리고 예시에서의 스택은 mutating키워드가 붙어있다. 이는 구조체의 아이템배열을 수정해야 하기 때문이다. 예시에서 정의 한 intvalue는 int값 만을 나타낼 수 있지만 지네릭 스택클래스를 활용하면 어떤 타입의 값도 나타낼 수있다.

Type Constraints
위 예시에서는 스택 값으로 어떤 타입이든 사용 할 수있었다. 하지만 가끔은 타입의 제한을 두는것이 더 효율적일 때가 있다. 타입제한은 특정 파라미터를 상속해야한다고 정의한다. 예를들면 딕셔너리의 값을 유일해야하기 때문에 hashable 프로토콜을 따라야 한다. 그렇지 않으면 키로 값을 접근했을 떄 원하지않은 값을 얻을 수 있다.

Type Constraint Syntax
타입제한의 문법은 상속받을 클래스나 프로토콜을 파라미터뒤에 위치하고 ,으로 구분한다.

Associated Types
연관타입은 프로토콜의 부분으로 타입에 플레이스홀더 이름을 추가한다. 연관타입의 키워드는 assosiatedtype으로 선언해 준다.

Extending an Existing Type to Specify an Associated Type
기존에 존재하는 타입에 연관된 타입을 추가할 수 있다. 스위프트의 배열은 이미 append, count, subscript가 정의되어 있다.

Generic Where Clauses
연관된 타입을 정의하기 위해서 지네릭 where절을 사용한다. where절을 통해 연관된타입이 특정 프로토콜을 따르고 어떤 타입과 파라미터가 동일해야하는 지 알려준다.

Contextual Where Clauses
지네릭 where절을 이미 지네릭 타입을 사용하고있다면 타입제약 선언이 없는 부분으로 사용할 수 있다.

Generic Subscripts
서브스크립트에도 where절을 사용할 수있다. 플레이스홀더의 타입을 subscript키워드 뒤 <>안에 저장한다.

profile
신입 ios개발자입니다!

0개의 댓글