티스토리 뷰

반응형

 

 

iOS 개발을 하다보면 많이 사용하게 되는 연산자 중 하나인 Map Operator는 단순 리터럴 값 뿐만 아니라, Combine, RxSwift 등의 Reactive Programming 을 할때에도 자주 사용되는데요. (많은 framework, library 에서 사용되는 Map 연산자)

이렇게 iOS개발을 할때 많이 사용되는 Map 연산자인데요. 그 중 Swift Standard Library의 Array Map 연산자의 정의와 사용 예시를 돌아보도록 하겠습니다.

 

 


iOS Map Operator 문서 개요 확인하기

배열을 다룰때 사용되는 Collection과 관련된 map 연산자에 대한 문서 개요를 보겠습니다. 하나의 클로져를 받는데, 클로져에서 특정 연산을 수행하고, 결과를 반환합니다. 이때 클로져 내에서 에러를 던질 수도 있습니다.

 

 

Map Operator 관련 문서의 예시를 보겠습니다. [String] 타입의 배열을 map 연산자로 맵핑을 하고 있습니다.

String 타입의 lowercased() 메서드를 사용해서 각각의 String을 소문자로 변형을 했습니다. 이어서 각각의 String 길이로 추가 맵핑을 하고 있습니다. 이렇게 맵핑을 통해 다른 타입으로 변형하는등의 특정 연산 수행이 가능합니다.

이어서 Playground로 배열의 Map Operator를 사용하는 예시들을 돌아보겠습니다.

 


Collection 배열 Map Operator 사용 예시

공식 문서에서 나왔듯이, [1, 2, 3] 과 같은 Collection 배열에서 map operator 사용이 가능합니다. 해당 Sequence의 element 값을 1씩 증가시키는 연산을 하고 있습니다. 결과적으로 [2, 3, 4]를 결과로 반환합니다.

 

 

 

 


Error Throwing이 가능한 Map 연산자

Map 연산자는 앞서 정의부에서 봤듯이, 에러를 던질 수 있습니다. Map 연산 과정에서 에러가 던져지면, 그에 맞게 에러 처리를 할 수가 있습니다.

위 코드는 맵 연산과정의 원본 element가 마이너스 인 경우, 그에 맞는 에러를 던지고, 이를 catch 블럭에서 알아채는 모습을 보여줍니다.

 

 


Map 연산 과정에서의 메서드, 클로져 활용

정의된 메서드나, 클로져를 Map 연산과정에서 사용할 수도 있습니다.

위에 정의된 increment, increment2, multiple 모두 map 연산자의 인자로 사용되어서 다양한 맵핑 연산을 수행할 수 있습니다. 단, 사용을 위해서는 원본 Collection 배열의 Element 타입을 맞춰주어야 합니다.

예를들어, [Int] 타입의 배열이라면, 해당 배열의 Element 타입인 Int를 인자로 받는 클로져, 메서드가 사용될 수 있습니다.

 

 

 


Optional과 Map 연산자를 활용한 단일 원소 맵핑

Swift의 중요한 개념 중 하나인 Optional은 none, some의 두가지 case를 가진 enum 열거형 타입으로 되어있는데요, some, none case를 활용해서 단인 원소만 특정 연산으로 맵핑하고, 그 결과를 사용할 수도 있습니다.

 

 

 


생성자를 활용한 다양한 Map 연산자 맵핑 방식

일반적으로 사용되는 51, 53라인의 클로져를 인자로 넣거나, trailing closure를 활용하는 방식 외에도 간단한 타입 맵핑이 필요한 경우, 55번 라인처럼 Double.init 과 같은 단일 인자를 가진 생성자를 사용해서 맵핑을 할 수도 있습니다.

위 예시는 다양한 형태로 map 연산자를 활용, [Int] 타입의 배열을 [Double] 타입의 배열로 맵핑하는 모습을 보여줍니다.

 

 


지금까지 iOS개발을 할때 많이 사용되는 Map Operator 연산자에 대한 간단한 정의를 문서로 알아보고, 기능 및 특징과 사용예시를 간단하게 돌아보았습니다. 

관련 피드백 환영합니다. 감사합니다~ 

 

 


Reference

 

Episode #13: The Many Faces of Map

Why does the `map` function appear in every programming language supporting "functional" concepts? And why does Swift have _two_ `map` functions? We will answer these questions and show that `map` has many universal properties, and is in some sense unique.

www.pointfree.co

 

 

반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함