itisjustK
코딩과 사람 사는 이야기
itisjustK
전체 방문자
오늘
어제
  • 분류 전체보기 (207)
    • 일이삼사오육칠팔구십일이삼사오육칠팔구십일이삼사오육칠.. (0)
    • Web (43)
      • html & css (9)
      • django & python (15)
      • java script (9)
    • iOS (51)
      • Swift (42)
      • SwiftUI (5)
    • CS (25)
      • 자료구조 (6)
      • 운영체제 (3)
      • 데이터베이스 (9)
      • 네트워크 (7)
    • PS (34)
      • 알고리즘 & 자료구조 (0)
    • Life (36)
    • Retrospective (15)
    • Book (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 점주
  • 생활코딩 #이고잉 #HTML #코딩 #개발자
  • SwiftUI
  • 연결리스트
  • SWIFT
  • POSTECH
  • 어플
  • CS
  • ios
  • 개발자
  • 세그멘테이션
  • nosql
  • 킨디
  • CoreData
  • crud
  • 생활코딩
  • 독립서점
  • mongodb
  • AppleDevloperAcademy
  • binding

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
itisjustK

코딩과 사람 사는 이야기

iOS/Swift

[iOS 프로그래밍을 위한 스위프트 기초] Ch3. 오류처리 및 고차함수 - 29. 고차함수

2021. 8. 1. 20:07

고차 함수 (Higher-order function)

 

- 다른 함수를 전달인자로 받거나 함수실행의 결과를 함수로 반환하는 함수

- 스위프트의 함수(클로저)는 일급시민(일급객체)이기 때문에 함수의 전달인자로 전달할 수 있으며, 함수의 결과값으로 반환가능

- 스위프트 표준라이브러리에서 제공하는 유용한 고차함수[map, filter, reduce]에 대해 알아볼 예정

- map, filter, reduce 함수는 스위프트 표준 라이브러리의 컨테이너 타입(Array, Set, Dictionary 등)에 구현되어 있음

 

 

map

map 함수는 컨테이너 내부의 기존 데이터를 변형하여 새로운 컨테이너 생성

let numbers: [Int] = [0, 1, 2, 3, 4]
var doubledNumbers: [Int]
var strings: [String]

 

기존의 for 문 사용

doubledNumbers = [Int]()
strings = [String]()

for number in numbers {
    doubledNumbers.append(number * 2)
    strings.append("\(number)")
}

print(doubledNumbers) // [0, 2, 4, 6, 8]
print(strings) // ["0", "1", "2", "3", "4"]

 

map 메소드 사용

// numbers의 각 요소를 2배하여 새로운 배열 반환
doubledNumbers = numbers.map({ (number: Int) -> Int in
    return number * 2
})

// numbers의 각 요소를 문자열로 변환하여 새로운 배열 반환
strings = numbers.map({ (number: Int) -> String in
    return "\(number)"
})

print(doubledNumbers) // [0, 2, 4, 6, 8]
print(strings) // ["0", "1", "2", "3", "4"]

// 매개변수, 반환 타입, 반환 키워드(return) 생략, 후행 클로저
doubledNumbers = numbers.map { $0 * 2 }
print(doubledNumbers) // [0, 2, 4, 6, 8]

 

 

 

filter

컨테이너 내부 값을 걸러 새로운 컨테이너로 추출

 

기존 for문 사용

var filtered: [Int] = [Int]()

for number in numbers {
    if number % 2 == 0 {
        filtered.append(number)
    }
}

print(filtered) // [0, 2, 4]

 

filter 메소드 사용

// numbers의 요소 중 짝수를 걸러내어 새로운 배열로 반환
let evenNumbers: [Int] = numbers.filter { (number: Int) -> Bool in
    return number % 2 == 0
}
print(evenNumbers) // [0, 2, 4]

// 매개변수, 반환 타입, 반환 키워드(return) 생략, 후행 클로저
let oddNumbers: [Int] = numbers.filter {
    $0 % 2 != 0
}
print(oddNumbers) // [1, 3]

 

 

 

reduce

컨테이너 내부의 콘텐츠를 하나로 통합

let someNumbers: [Int] = [2, 8, 15]

 

기존 for문 사용

var result: Int = 0

// someNumbers의 모든 요소를 더합니다
for number in someNumbers {
    result += number
}

print(result) // 25

 

reduce 메소드 사용

let sum: Int = someNumbers.reduce(0, { (first: Int, second: Int) -> Int in
    //print("\(first) + \(second)") //어떻게 동작하는지 확인해보세요
    return first + second
})

print(sum)  // 25

// 초깃값이 0이고 someNumbers 내부의 모든 값을 뺍니다.
var subtract: Int = someNumbers.reduce(0, { (first: Int, second: Int) -> Int in
    //print("\(first) - \(second)") //어떻게 동작하는지 확인해보세요
    return first - second
})

print(subtract) // -25

// 초깃값이 3이고 someNumbers 내부의 모든 값을 더합니다.
let sumFromThree = someNumbers.reduce(3) { $0 + $1 }

print(sumFromThree) // 28

 

'iOS > Swift' 카테고리의 다른 글

[iOS 앱 프로그래밍] 음원 재생기 애플리케이션 - 2. 애플리케이션 만들기 (2)  (0) 2021.08.04
[iOS 앱 프로그래밍] 음원 재생기 애플리케이션 - 애플리케이션 만들기 (1)  (0) 2021.08.04
[iOS 프로그래밍을 위한 스위프트 기초] Ch3. 오류처리 및 고차함수 - 28. 오류 처리  (0) 2021.07.30
[iOS 프로그래밍을 위한 스위프트 기초] Ch2. 다양한 표현 및 확장 - 27. 익스텐션  (0) 2021.07.30
[iOS 프로그래밍을 위한 스위프트 기초] Ch2. 다양한 표현 및 확장 - 26. 프로토콜  (0) 2021.07.29
    'iOS/Swift' 카테고리의 다른 글
    • [iOS 앱 프로그래밍] 음원 재생기 애플리케이션 - 2. 애플리케이션 만들기 (2)
    • [iOS 앱 프로그래밍] 음원 재생기 애플리케이션 - 애플리케이션 만들기 (1)
    • [iOS 프로그래밍을 위한 스위프트 기초] Ch3. 오류처리 및 고차함수 - 28. 오류 처리
    • [iOS 프로그래밍을 위한 스위프트 기초] Ch2. 다양한 표현 및 확장 - 27. 익스텐션
    itisjustK
    itisjustK

    티스토리툴바