2024년 4월 3일 수요일 (영원한 아기판다가 떠난 푸중절.. 늘 건강해야해 푸곰쥬..)
평소 의식하지 못한 채 사용하는 많은 패턴들 중 와일드카드 패턴을 closure 사례를 통해 복습하며 익혀 봅니다.
※ 와일드카드 패턴은 유닉스 시스템의 초기(1971년)부터 사용되어 온 오래된 개념으로,
다양한 프로그래밍 및 검색 작업에서 유용하게 사용되고 있다.
패턴의 종류
- 값을 해체(추출)하거나 무시하는 패턴
- 와일드카드 패턴, 식별자 패턴, 바인딩 패턴, 튜플 패턴 ... - 패턴 매칭을 위한 패턴
- 열거형 케이스 패턴, 옵셔널 패턴, 표현 패턴, 타입캐스팅 패턴 ...
Swift 언어에서의 와일드카드 패턴
"와일드카드 식별자가 위치한 곳의 값은 무시한다. "
밑줄( _ )로 표현되며, 코드 내에서 특정 값을 해체하거나 무시해야 할 때 유용하게 사용된다. 밑줄의 자리에 올것이 무엇이든 상환하지 말라는 뜻으로 for 구문이나 switch 구문에 많이 사용된다.
고차함수의 클로저에서 사용 ($0)
클로저에서 사용하는 와일드카드를 사용한, 결과는 동일하지만 작성하는 방식이 다른 아래의 코드를 비교해 보자.
#1. 간결함보다 가독성을 중시한, 직관적인 방식
let friends : [(name: String, age: Int)] = [("Nayeon", 22), ("Maggie", 24), ("Jenny", 30)]
let result = friends.filter{ $0.name != "Nayeon" }
print(result)
$0.name != "Nayeon"을 사용하여 필터링을 했다. 클로저 내에서 $0를 사용하여 간단하게 요소의 name 속성에 접근!
#2. 패턴 매칭 - 명시적으로 요소를 처리
let friends = [("Nayeon", 22), ("Maggie", 24), ("Jenny", 30)]
let result = friends.filter {(name, _) in if name == "Nayeon" {return false} else {return true} }
print(result)
클로저 내에서 튜플의 첫 번째 요소(이름)와 두 번째 요소(나이)를 분리하여 받고 있으며, 이름이 "Nayeon"인 경우에는 false를 반환하여 해당 요소를 필터링 결과에서 제외하고, 그렇지 않은 경우에는 true를 반환하여 필터링 결과에 포함했다.
#3. 첫 번째 요소에 직접 접근하여 필터링하는 방식 - 튜플 구조를 명확히 이해한다면 유용하다.
let friends = [("Nayeon", 22), ("Maggie", 24), ("Jenny", 30)]
let result = friends.filter{ $0.0 != "Nayeon" }
print(result)
$0.0 != "Nayeon" 사용하여 "Nayeon"이 아닌 요소들을 필터링하고 result 배열에 저장한 후 출력하는 코드. 배열의 첫 번째 요소인 이름에 바로 접근했다. 즉 $0.name이 아닌 $0.0으로 표현했다.
위의 세 가지 코드 모두 "Nayeon"을 제외한 나머지 친구들의 이름과 나이가 튜플 형태로 배열에 저장되어 출력된다.
[("Maggie", 24), ("Jenny", 30)]
※ 함수는 클로저의 일종이다. 가끔 클로저가 더 작은 개념같지만 클로저가 더 넓은 개념이라는 것을 기억하자.
'iOS 앱 개발자 프로젝트' 카테고리의 다른 글
[iOS] viewIsAppearing (0) | 2024.04.27 |
---|---|
[iOS] Framework와 Library 차이점 (Framework Vs. Library) (0) | 2024.04.14 |
[iOS] error: Multiple commands produce (2) | 2024.04.13 |
[iOS] 키오스크 상단 카테고리 영역 만들기 (0) | 2024.04.08 |
[iOS] MVC (Model-View-Controller) (2) | 2024.04.05 |