본문 바로가기

Swift

[Swift] Generic

Generic

CPP에서 템플릿을 썼었는데 Swift에서는 Generic이 있습니다. ㅎ

 

Generic 말그대로 일반화입니다. 동적으로 타입을 정의해주기 때문에 Array, Dictionary 등 collection타입은 주로 Generic으로 만들어 졌습니다. 왜냐 Collection 타입에 Int, String, Float등 다양한 타입이 들어갈 수 있잖아요!! 

 

기본적인 swap 함수도 Generic으로 구현되어 있습니다.

 

함수뒤에 <BLABLA> 쓰고 타입으로 제네릭을 쓸 부분에 BLABLA를 써넣으면 됩니다. 

 

제가 하면서 재밌었던 부분

여러 프로토콜들이 있습니다.

 

예를 들어

여기 a, b파라미터의 값을 swap시켜주는 함수를 만들었습니다.

만약 a, b가 같을 때는 값을 바꿔주지 않으려면 같을 때 == 를 넣어줍니다.!! 

오류가 나네요!! 이유는 T에 들어오는 값들이 == 연산자를 사용할 수 없을 수도 있기 때문이에요.

 

이럴 땐 아래와 같이 T라는 타입은 Equatable 프로토콜을 상속 받는 타입만 받겠다고 해두면 되요 ㅎ

+ 프로토콜이 아니어도 특정 클래스를 상속 받는지도 할 수 있어요. ㅎ 

다르게 where 절을 사용할 수 도있습니다. ㅎ 

 

또 자주 쓰는 protocol이 Comparable이 있습니다. 즉 비교!! >= 부등호같은 것들!!

 

그리고 아래는 String의 Protocol입니다 엄청 많죠?! 

 

후기

제네릭을 이용해 collection타입을 만들다가 ==, > 같은 연산자를 사용하게 되었습니다. 오류가 떠서 처음에 당황했지만 프로토콜 Comparable과 Equatable을 사용해서 해결했습니다.  또한 where절을 통해서도 프로토콜을 적용시킬 수 있음을 알았습니다. 

추후 많은 프로토콜들을 다루면 좋을 것 같습니다.

'Swift' 카테고리의 다른 글

[Swift] - Operator  (0) 2021.07.07
[Swift] Dictionary - init, grouping, by  (0) 2021.04.06
[Swift] compactMap, flatMap  (0) 2021.04.06
[Swift] struct, class - remind  (0) 2021.03.28
[Swift] Completion, Closure Excaping  (0) 2021.03.25