Menu
Coddy logo textTech

파이프라인 구축하기

Coddy Swift 여정의 로직 및 흐름 섹션에 포함된 레슨 — 56개 중 31번째.

지금까지 살펴본 map, filter, reduce, compactMap, flatMap, sorted(by:) 메서드들은 Swift의 일상적인 도구 모음입니다. 실제 코드에서는 이들을 함께 엮어서 사용합니다.

struct Order {
    let item: String
    let qty: Int
}
let orders = [Order(item: "apple", qty: 3), Order(item: "bread", qty: 0), Order(item: "milk", qty: 5)]
let names = orders
    .filter { $0.qty > 0 }
    .sorted { $0.qty > $1.qty }
    .map { $0.item }
print(names)                  // ["milk", "apple"]

체인을 위에서 아래로 읽으세요: 비어 있지 않은 주문을 유지하고, 수량에 따라 내림차순으로 정렬한 다음, 이름만 남깁니다.

파이프라인은 각 단계가 하나의 목적을 가질 때 효과적입니다. 클로저 내부에서 두 가지 일(매핑 필터링)을 동시에 하고 있다면, 이를 두 단계로 나누세요. 체인이 길어져도 가독성이 유지됩니다.

challenge icon

챌린지

중급

한 줄의 입력을 읽으십시오: 쉼표로 구분된 name:price:qty 항목 목록입니다. 일부 항목은 형식이 잘못되었으므로 건너뛰어야 합니다: 가격(price)이나 수량(qty)이 유효한 정수가 아닌 모든 항목이 해당됩니다.

qty > 0유효한 항목당 한 줄씩 생성하고, 합계(price * qty)를 기준으로 내림차순 정렬하여 다음 형식으로 출력하는 파이프라인을 구축하십시오:

<name>: <total>

항목별 줄 다음에, 전체 합계를 포함한 요약 줄 하나를 출력하십시오: Sum: <n>

입력 apple:3:2,bread:bad:1,milk:4:5,cheese:8:0,salt:2:7에 대한 출력은 다음과 같습니다:

milk: 20
salt: 14
apple: 6
Sum: 40

치트 시트

고차 함수를 체이닝하면 각 단계가 하나의 목적을 갖는 가독성 좋은 파이프라인을 만들 수 있습니다:

let names = orders
    .filter { $0.qty > 0 }
    .sorted { $0.qty > $1.qty }
    .map { $0.item }

일반적인 파이프라인 메서드: filtercompactMapsorted(by:)mapreduce. 만약 클로저가 한 번에 두 가지 작업(예: 매핑 필터링)을 수행한다면, 이를 두 단계로 나누세요.

직접 해보기

let entries = readLine()!.components(separatedBy: ",")

// TODO: compactMap (parse), filter (qty > 0)를 사용한 파이프라인,
// sorted (total 내림차순), map (format); 라인 출력 + Sum
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

로직 및 흐름의 모든 레슨