Menu
Coddy logo textTech

선택적 조회

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

딕셔너리 서브스크립트는 항상 Optional을 반환합니다. 키가 존재할 때는 그 값을, 존재하지 않을 때는 nil을 반환합니다. Swift는 이 두 가지 경우를 모두 처리하도록 강제합니다.

let prices: [String: Int] = ["apple": 1, "bread": 3]
let p = prices["apple"]
print(p)                          // Optional(1)

Optional을 처리하는 세 가지 관용적인 방법입니다. 상황에 가장 적합한 것을 선택하세요.

1. if let: 두 분기를 명시적으로 처리합니다:

if let p = prices["apple"] {
    print("apple costs \(p)")
} else {
    print("unknown")
}

2. nil 병합(nil-coalescing) ??: 인라인으로 대체값(fallback)을 제공합니다:

let p = prices["olive"] ?? 0    // 0

3. 기본값이 있는 서브스크립트(subscript with default): 결과는 동일하지만, 해당 키에 값을 다시 쓸 때 기본값도 함께 생성되어 유지됩니다:

var counts = ["a": 2]
counts["b", default: 0] += 1   // counts == ["a": 2, "b": 1]
challenge icon

챌린지

쉬움

딕셔너리 prices가 주어집니다. 사용자로부터 구매하려는 품목들이 쉼표로 구분된 리스트 형태의 입력을 한 줄 읽으세요.

입력된 순서대로 각 품목을 prices에서 찾아보세요. 각 품목당 한 줄씩 다음을 출력합니다:

  • 품목이 딕셔너리에 있는 경우: <item> @ <price>
  • 그렇지 않은 경우: <item> not sold

모든 품목을 나열한 후, 마지막에 Total: <sum>을 출력하세요. 없는 품목의 가격은 nil 병합 연산자(nil-coalescing operator)를 사용하여 0으로 처리합니다.

입력값이 apple,bread,olive,milk인 경우, 출력은 다음과 같습니다:

apple @ 1
bread @ 3
olive not sold
milk @ 4
Total: 8

치트 시트

딕셔너리 서브스크립트는 Optional을 반환합니다 — 키가 존재하면 그 값을, 그렇지 않으면 nil을 반환합니다.

1. if let — 두 가지 분기를 모두 처리합니다:

if let p = prices["apple"] {
    print("apple costs \(p)")
} else {
    print("unknown")
}

2. Nil 병합 연산자 ?? — 기본값을 제공합니다:

let p = prices["olive"] ?? 0    // 0

3. 기본값이 있는 서브스크립트 — 쓰기 작업에서도 작동하는 기본값입니다:

var counts = ["a": 2]
counts["b", default: 0] += 1   // ["a": 2, "b": 1]

직접 해보기

let prices: [String: Int] = ["apple": 1, "bread": 3, "milk": 4]
let items = readLine()!.components(separatedBy: ",")

// TODO: 항목별 조회; '@ 가격' 또는 '판매되지 않음' 출력; ?? 0을 사용하여 합계 계산
quiz icon실력 점검

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

로직 및 흐름의 모든 레슨