Menu
Coddy logo textTech

클로저 기초

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

클로저는 나중에 전달하고 호출할 수 있는 독립적인 코드 블록입니다. 전체 구문은 매개변수와 반환 타입을 명시합니다:

let double = { (n: Int) -> Int in
    return n * 2
}
print(double(5))                  // 10

Swift는 문맥이 명확할 때 타입을 추론할 수 있으므로, 긴 형태를 작성하는 경우는 드뭅니다. map, filter 등 내부에서는 더 짧은 약식 표현이 일반적입니다:

let nums = [1, 2, 3, 4]
let doubled = nums.map { n in n * 2 }
let alsoDoubled = nums.map { $0 * 2 }    // 가장 짧음, $0은 첫 번째 인자입니다

클로저는 값입니다. 변수에 저장할 수 있고, 함수에서 반환할 수 있으며, 인자로 전달할 수 있습니다. 그것이 바로 map이 작동하는 이유입니다.

challenge icon

챌린지

쉬움

두 줄의 입력을 읽으십시오:

  1. 정수 x
  2. 쉼표로 구분된 정수 리스트

각각 (Int) -> Int 타입인 세 개의 클로저(closures)를 정의하십시오:

  • addX: 인수에 x를 더합니다.
  • square: 인수의 제곱을 반환합니다.
  • negate: 인수의 부호를 반전시켜 반환합니다.

map을 사용하여 리스트의 모든 요소에 각 클로저를 적용하십시오. 각 클로저당 한 줄씩, 결과를 ,로 연결하여 총 세 줄을 출력하십시오:

addX: ...
square: ...
negate: ...

첫 번째 줄에 10, 두 번째 줄에 1,2,3이 입력으로 주어지면, 출력은 다음과 같습니다:

addX: 11,12,13
square: 1,4,9
negate: -1,-2,-3

치트 시트

클로저(closure)는 저장되거나 전달될 수 있는 독립적인 코드 블록입니다. 전체 구문은 다음과 같습니다:

let double = { (n: Int) -> Int in
    return n * 2
}

클로저는 변수에 저장될 수 있으며 (예: map 등에) 인자로 전달될 수 있습니다. Swift는 문맥에서 타입을 추론하므로 축약형을 사용할 수 있습니다:

let nums = [1, 2, 3, 4]
let doubled = nums.map { n in n * 2 }
let alsoDoubled = nums.map { $0 * 2 }  // $0는 첫 번째 인자입니다

직접 해보기

let x = Int(readLine()!)!
let nums = readLine()!.components(separatedBy: ",").map { Int($0)! }

// TODO: 세 개의 (Int) -> Int 클로저를 정의하고 nums를 각각에 매핑하세요
quiz icon실력 점검

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

로직 및 흐름의 모든 레슨