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 |