-
[Swift] 고차함수 map, flatMap, compactMap모바일 앱 개발 2021. 8. 26. 16:37
개요
화면에 표시해줄 데이터는 보통 서버에서 컬렉션 형태로 내려옵니다.
이런 컬렉션 타입내 각각의 값에 필요한 작업을 적용하기 위해 고차함수인 Map을 주로 사용하는데
Swift에서 제공하는 map의 종류가 3가지라서 종종 헷갈립니다.
이번에 확실하게 정리 해봅니다.
map
다른 언어세도 통용되는 map과 같은 개념으로,
배열과 같은 콜렉션 타입의 각 요소에 접근해서 원하는 작업을 수행한 결과를 다시 반환합니다.
let arrayOfIntegers = [1, 2, 3, 4] let arrayOfStrings = arrayOfIntegers.map { String($0) } print(arrayOfStrings) // Prints ["1", "2", "3", "4"]
compactMap
Swift는 다른 언어에 잘 없는 Optional 이라는 개념이 있는데요.
comactMap은 map과 유사하지만 컬렉션 내에서 nil(null)에 해당하는 값은 자동으로 제거한 결과를 반환합니다.
Optional한 데이터를 처리하는데 유용합니다.
let arrayOfIntegers = [1, 2, nil, 4] let arrayOfStrings = arrayOfIntegers.compactMap { optionalInteger -> String? in guard let integer = optionalInteger else { return nil } return String(integer) } print(arrayOfStrings) // Prints ["1", "2", "4"]
flatMap
compact Map을 이해했다면, flatMap도 쉽게 이해할 수 있습니다.
flatMap도 동일하게 컬렉션내에서 nil을 제거한 값을 반환합니다.
하지만 다른 점이 하나있는데요.
"Flat" 이라는 말처럼 2차원 배열을 1차원으로 Flat하게 만들어서 반환해주는 역할도 합니다.
그렇기 때문에 아래와 같은 복잡한 배열(2차원)에서 자주 사용됩니다.
let arrayOfIntegers = [[1, 3, 5, nil], [2, nil, 6]] let arrayOfStrings = arrayOfIntegers.flatMap { $0 }.compactMap { $0 } print(arrayOfStrings) // Prints [1, 3, 5, 2, 6]
flatMap으로 먼저 배열을 1차원으로 만들고 -> compactMap을 이용해서 nil 값들을 없앨 수 있습니다.
레퍼런스
https://betterprogramming.pub/map-vs-flatmap-vs-compactmap-c75f66b904a6
'모바일 앱 개발' 카테고리의 다른 글
ADB 기본 명령어 및 명령어를 활용한 앱 설치 자동화 (0) 2021.08.24 윈도우에서 Android 개발 환경 셋팅하기 (0) 2021.08.11 Swift - iOS앱 구글애드몹 광고 연동 방법 (0) 2020.03.09 Swift-WebKitView를 통해 앱에서 웹화면 출력하기 (0) 2019.10.05