Swift의 Closure 란?

2024. 11. 25. 16:42·App Development/Swift

Swift official document에서는 Closure를 named function을 생성하지 않고 같이 실행하는 Grouped code라고 정의합니다.

 

클로저 (Closures) | Swift

명명된 함수 생성없이 실행되는 코드 그룹입니다. 클로저 (Closures) 는 코드에서 주변에 전달과 사용할 수 있는 자체 포함된 기능 블럭입니다. Swift의 클로저는 다른 프로그래밍 언어에서 클로저,

bbiguduk.gitbook.io

 

기본 syntax는 아래와 같습니다.

{ (#parameters#) -> <#return type#> in
	<#statements#>
}

 

전달받은 매개 변수를 변환 타입에 맞춰 반환 후 실행 코드를 반환합니다.

 

Closure의 유형

  • 기본 형태
let greeting = { (name: String) -> String in
	return "Hello, \(name)"
}

print(greeting("Jin"))

// Hello, Jin

 

  • 함수의 매개변수로 활용
func performAction(action: () -> Void) {
	action()
}

performAction {
	print("Action executed!")
}

 

Void란?
여러 프로그래밍 언어에서 사용되는 개념으로 "아무 것도 없음"을 의미합니다. 이를 통해 특정 함수가 값을 반환하지 않거나, 어떠한 데이터도 가지지 않는 것을 나타낼 수 있습니다.

 

  • 후행 클로저(Trailing closure)

후행 클로져는 함수 호출 시 마지막 매개변수에 Closure를 사용할 때, 소괄호 바깥에 클로저를 작성하는 방식입니다. $0은 Swift의 축약형 코드로 첫번째 매개변수를 의미하여, 아래 코드에서 $0은 numbers의 values 를 나타냅니다. map 함수에서 $0 (numbers의 values)의 값에 각각 2를 곱하라는 의미가 됩니다. 

let numbers = [1, 2, 3, 4]
let doubledNumbers = numbers.map() { $0 * 2 }
// 소괄호를 생략해도 무관함

print(doubleNumbers)

// [2, 4, 6, 8]

공식 Document를 봐도 이해가 되지 않아요

https://stackoverflow.com/questions/27931762/dont-understand-closures-example-in-swift

A closure is just a function with the parameters moved inside the brackets, with the keyword "in" to seperate the parameter from the function body.

 

func myFunc(number: Int) -> Int {
	let result = number * 3
    return result
}

func myClosure -> {(number: Int) -> Int in
	let result = 3 * number
    return result
}

let x = myFunc(2)
let y = myClosure(2)

print(x) // 6
print(y) // 6

 

 

두 코드는 매개변수와 변환 타입의 위치만 다를 뿐 결과 값은 같습니다. numbers라는 array를 호출할 때,

let numbers = [1, 2, 3]

let times3 = numbers.map(myFunc)
let times3_2 = numbers.map(myClosure)

//위 closure 코드는 아래 코드와 같다
let times3_3 = numbers.map({(numbers: Int) -> Int in
	let result = number * 3
    return result
})

 

Closure의 특징

  • 함수보다 간결하게 작성할 수 있으며 in 키워드를 사용해 매개 변수와 실행 코드를 분리합니다.
  • 정의된 컨텍스트(정의한 원래 범위가 존재하지 않더라도)에서 모든 상수와 변수에 대한 참조를 캡쳐(참조 및 수정)하고 저장할 수 있습니다.
저작자표시 비영리 동일조건 (새창열림)

'App Development > Swift' 카테고리의 다른 글

Swift의 매개변수(parameter) 정리하기  (0) 2024.11.30
Swift에서의 completion  (0) 2024.11.26
Swift의 ARC (Automatic Reference Counting)  (0) 2024.11.24
Swift에서의 Class  (0) 2024.11.24
Swift 분기 처리 정의와 종류  (0) 2024.11.23
'App Development/Swift' 카테고리의 다른 글
  • Swift의 매개변수(parameter) 정리하기
  • Swift에서의 completion
  • Swift의 ARC (Automatic Reference Counting)
  • Swift에서의 Class
Genie Choi 지니 초이
Genie Choi 지니 초이
  • Genie Choi 지니 초이
    Genie World
    Genie Choi 지니 초이
  • 전체
    오늘
    어제
    • 분류 전체보기 (27)
      • Genie (3)
      • Projects (6)
      • Up-to-date learning (0)
      • App Development (10)
        • React Native (1)
        • Swift (9)
      • Marketing Tool (1)
        • Mobile Measurement Platform (1)
        • CRM Marketing (0)
      • Linux (5)
      • AWS (2)
        • EC2 (1)
        • Route 53 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    오블완
    티스토리챌린지
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
Genie Choi 지니 초이
Swift의 Closure 란?
상단으로

티스토리툴바