generic
-
Swift Generic - 3Programming/Swift(iOS) 2021. 4. 6. 21:28
String 배열의 빈도수를 세는 프로그램을 짜 봅시다. hash로 빈도수를 세면 될것 같은데요..(python이면 collections의 defaultdict를 사용하겠지만..) let arr = [ "hello", "world", "hello", "world", "hello", "world", "show", "me", ] func printValues(_ values: [String]) { print(values.sorted()) var result = [String: Int]() for e in values { //result[e]가 존재하지 않으면 0, 존재하면 값 가져오는 부분 let v = result[e] ?? 0 result[e] = v + 1 } print(result) } 만약 Stri..
-
Swift Generic - 2Programming/Swift(iOS) 2021. 4. 6. 14:50
배열 sort함수를 예로 들어보죠. sort는 배열 안에 담긴 객체 타입이 어떤것이냐에 따라서 다른데요. Int, Float, String등 시스템에서 제공하는 기본타입은 sorted가 됩니다. 하지만 사용자가 구현한 객체 타입은 되지 않습니다. 이유는 기본 타입의 경우에는 'Comparable' Protocol을 미리 준수했기 때문입니다. 사용자가 만든 객체의 경우에도 동일하게 'Comparable' Protocol을 준수하면 가능합니다. 갑자기 제너릭 하다가 프로토콜로 빠져버렸는데요. sorted는 타입에 따라서 모두 제공을 하기 때문에 제너릭으로 구현되어 있습니다. 원형을 찾아보면 Self.Element로 되어 있습니다. @inlinable public func sorted() -> [Self.El..
-
Swift Generic - 1Programming/Swift(iOS) 2021. 4. 6. 14:05
모든 객체 지향 언어에는 Generic이라는 개념이 존재합니다. 제너릭을 지원하므로써, 동일한 로직이 갖고 있는 함수에 대해서 중복을 제거할 수 있습니다. 한번만 만들면되고, 아직 작성되지 않는 다양한 타입에 대해서도 대응이 가능합니다. 또한, 제너릭을 사용하므로써 Any 타입이 아니기때문에 실행시간에 다운 캐스트와 같은 불필요한 동작도 필요하지 않습니다. 오버로딩은 함수를 중복으로 구현하고, 전달인자를 다르게 하는것이고, 제너릭은 하나의 함수를 다양한 타입이 지원가능하도록 만드는 것입니다. Generic의 구현 방식 1) 컴파일러가 코드를 생성하는 방식 => C++, C#, Swift : 타입 안정성 뿐만 아니라, '컴파일 타임 다형성'을 구현하는 것이 가능하다. 2) Any Type으로 생성하고, 컴..