본문 바로가기

Swift/문법 정리

Map 함수

이번에 앱센터 과제를 하다가 Map함수가 나와서 좀 알아보았다.

Map 함수는 스위프트 라이브러리에서 제공하는 유용한 고차함수에 포함된다. (map말고 filter, reduce도 있다.)

 

그럼 고차함수란 무엇일까. 

고차함수는 다른 함수를 전달인자로 받거나 함수실행의 결과를 함수로 반환하는 함수를 뜻한다.

즉, 함수를 전달인자로 받거나, 함수의 반환값이 함수인 함수를 고차함수라 한다.


map(_:)

시퀀스의 요소에 대해 주어진 클로저를 매핑한 결과를 포함하는 배열을 반환합니다.

Declaration

func map<T>(_ transform: (Self.Element) throws -> T) rethrows -> [T]

Parameters

변환

     매핑 클로저. 변환은 이 시퀀스의 요소를 매개변수로 받아들이고 동일하거나 다른 유형의 변환된 값을 반환합니다.

Return Value

이 시퀀스의 변환된 요소를 포함하는 배열입니다.

Discussion

let cast = ["Vivien", "Marlon", "Kim", "Karl"]
let lowercaseNames = cast.map { $0.lowercased() }
// 'lowercaseNames' == ["vivien", "marlon", "kim", "karl"]
let letterCounts = cast.map { $0.count }
// 'letterCounts' == [6, 6, 3, 4]

 


공식 문서를 변역해보면 이런식으로 되어있다.

Map함수를 쉽게 설명하자면 기존의 데이터를 변형하여 새로운 배열을 만들때 사용하는 함수라고 생각하면 된다.

 

간단한 코드로 예를 들어 설명하자면  

let items = ["맥북", "아이패드", "애플워치", "아이폰"]
var array = [String]()

for item in items {
    array.append("임현규의 " + item)
}

print(array)

// ["임현규의 맥북", "임현규의 아이패드", "임현규의 애플워치", "임현규의 아이폰"]
let items = ["맥북", "아이패드", "애플워치", "아이폰"]

let array = items.map { "임현규의 " + ($0)}

print(array)

// ["임현규의 맥북", "임현규의 아이패드", "임현규의 애플워치", "임현규의 아이폰"]

위의 예제는 for-in문으로 작성한 코드이고, 아래 예제는 map을 이용해서 작성한 코드이다.

 

 

한눈에 봐도 아래쪽이 더 직관적인걸 볼 수 있다. map함수는 따로 빈 배열을 선언해 append하지 않아도된다.

이밖에도 map함수는 for - in 구문보다 좋은 점들이 있는데 map을 사용하면 재사용에 용이하고, 컴파일러 최적화 성능이 좋다..

 

앞으로 코드짤때 잘 활용해먹어야겠다.

 

 

'Swift > 문법 정리' 카테고리의 다른 글

클로저(Closure)를 알아보자  (1) 2022.07.16
타입 캐스팅(업캐스팅 & 다운캐스팅)  (0) 2022.04.04
옵셔널 타입  (0) 2022.04.03