클로저와 델리게이트는 Swift에서 많이 사용되는 기능 중 하나입니다. 이들은 코드를 조금 더 모듈화하고 유연하게 만들어주는 역할을 합니다. 이번 포스트에서는 클로저와 델리게이트의 기본 개념과 사용 방법에 대해 알아보겠습니다.
클로저(Closure)
클로저는 일종의 코드 블럭으로, 이름 없이 정의할 수 있는 함수입니다. 클로저는 변수나 상수로 선언되어 다른 함수에 전달될 수 있고, 함수의 반환 값으로 사용될 수도 있습니다.
클로저의 기본 문법은 다음과 같습니다:
{ (parameters) -> ReturnType in
statements
}
예제 코드를 통해 클로저의 사용을 살펴보겠습니다:
let numbers = [1, 2, 3, 4, 5]
let squaredNumbers = numbers.map { (number) -> Int in
return number * number
}
print(squaredNumbers) // 출력: [1, 4, 9, 16, 25]
위 예제에서 map
메서드의 인자로 클로저를 전달하여 배열의 각 요소를 제곱한 결과를 새로운 배열로 반환합니다.
클로저는 주로 함수나 메서드의 인자로 사용되며, 사용자 지정 작업을 수행하고자 할 때 특히 유용합니다.
델리게이트(Delegate)
델리게이트는 한 객체가 다른 객체로 작업을 위임하는 디자인 패턴입니다. 일반적으로 델리게이트는 프로토콜을 통해 정의되며, 델리게이트를 구현하고자 하는 객체는 해당 프로토콜을 채택해야 합니다. 델리게이트를 사용함으로써 객체 간의 결합도를 낮출 수 있고, 코드의 재사용성을 높일 수 있습니다.
델리게이트의 구현 순서는 다음과 같습니다:
- 프로토콜을 정의하고, 원하는 작업에 대한 메서드를 선언합니다.
- 델리게이트 역할을 하는 객체는 해당 프로토콜을 채택합니다.
- 델리게이트 객체는 필요한 메서드를 구현합니다.
델리게이트의 사용 예제를 살펴보기 위해 간단한 커스텀 버튼 클래스를 만들어보겠습니다:
protocol CustomButtonDelegate: AnyObject {
func buttonClicked()
}
class CustomButton {
weak var delegate: CustomButtonDelegate?
func onClick() {
delegate?.buttonClicked()
}
}
class ViewController: CustomButtonDelegate {
let button = CustomButton()
init() {
button.delegate = self
}
func buttonClicked() {
print("Button clicked")
}
}
let viewController = ViewController()
viewController.button.onClick() // 출력: "Button clicked"
위 예제에서 CustomButtonDelegate
프로토콜은 buttonClicked()
메서드를 선언합니다. CustomButton
클래스에서는 delegate
프로퍼티로 해당 프로토콜을 가지며, onClick()
메서드를 호출할 때에 델리게이트 객체를 통해 buttonClicked()
메서드를 호출합니다. ViewController
클래스는 CustomButtonDelegate
를 채택하고, buttonClicked()
메서드를 구현하여 버튼이 클릭되었을 때 원하는 작업을 수행합니다.
결론
클로저와 델리게이트는 Swift에서 기능을 모듈화하고 유연하게 만드는 데 도움을 주는 중요한 요소입니다. 클로저는 코드의 재사용성과 간결성을 향상시키며, 델리게이트는 객체 간의 결합도를 낮추고 더 유연한 코드 작성을 가능하게 합니다.
더 많은 정보를 원하신다면 아래의 참고 자료를 확인해보세요: