본문 바로가기
Swift/기초

Swift 기초 다지기 - 클로저 (Closures)

by 박신혁 2024. 10. 4.

클로저 (Closures)

클로저는 함수처럼 매개변수를 받고 값을 반환할 수 있으며, 일급 객체로서 변수에 저장하거나 인자로 전달할 수 있다.

클로저를 사용하면 길어질 수 있는 코드를 간결하게 해 가독성을 높일 수 있다.

 

// 클로저 표현식
let greet = { (name: String) -> String in
    return "안녕하세요, \(name) 입니다."
}


// 클로저 호출
let myName = greet("철수")
print(myName) // 안녕하세요, 철수 입니다.



클로저 간결한 표현 예시

// 매개변수 타입 생략 (타입 추론)
let add = { (a, b) -> Int in
    return a + b
}


// 반환 타입 생략 (타입 추론)
let add = { (a: Int, b: Int) in
    return a + b
}


// 전체 타입을 지정해 매개변수 타입 , 반환 타입 생략 (타입 추론)
let add: (Int, Int) -> Int = { (a, b) in
    return a + b
}


// 리턴 생략
let add: (Int, Int) -> Int = { (a, b) in
    a + b
}


// 단축 인자를 사용해 매개변수 이름 생략
let add: (Int, Int) -> Int = { $0 + $1 }

후행 클로저 (Trailing Closure)

함수의 마지막 인자로 클로저를 사용할 때, 그 클로저를 함수 호출 괄호의 밖에 정의할 수 있다.

 

// 클로저를 인자로 받을 수 있게끔 타입 정의한 함수
func addition(a: Int, b: Int, operation: (Int, Int) -> Int) {
    let result = operation(a, b)
    print("\(result)")
}

// 후행 클로저, 클로저를 마지막 인자로 사용 (별(*) 표시된 부분이 후행 클로저)
addition(a: 3, b: 5) * { a, b in a + b } *

// 단축 인자 사용 했을때
addition(a: 3, b: 5, operation: { $0 + $1 })

 


알게 모르게 가장 많이 사용하는 클로저

아 맞다, 이게 클로저였지 라고 새삼스레 깨닫는 경우를 느낀 적이 많다.

 

728x90

댓글