iOS 앱을 개발하다 보면 버튼을 누르거나 스위치를 바꾸는 등, 사용자의 동작에 반응해야 할 일이 자주 있다.
이럴 때 대표적으로 사용하는 방법이 바로 addTarget(_:action:for:)
이다.
오늘은 그 addTarget
과, iOS 14부터 새로 등장한 addAction
을 알아보고 비교해봤다.
🤔 addTarget(_:action:for:)이란?
addTarget
은 UIControl 계열(UI버튼, 스위치, 슬라이더 등)의 요소가 사용자 이벤트에 반응하도록 특정 메서드를 연결해주는 방식이다.
let button = UIButton()
button.addTarget(self, action: #selector(tapButton), for: .touchUpInside)
@objc
func tapButton() {
print("버튼이 눌렸어요!")
}
이 코드는 버튼을 눌렀다 뗐을 때(.touchUpInside
), tapButton()
메서드가 실행되도록 연결한 예시다.
🔍 하나씩 뜯어보자.
addTarget
: “어떤 객체(self
)”에게 “무슨 동작을 할지” 알려주는 메서드self
: 이 메서드를 실행할 주체 (보통은 현재의ViewController
)action
:#selector(tapButton)
→tapButton()
이라는 메서드를 실행하겠다는 뜻for
:.touchUpInside
→ 버튼을 눌렀다 뗄 떼 실행되는 이벤트
즉, 이 버튼을 눌렀다 떼면, ViewController
에 있는 tapButton()
메서드가 실행된다.
🧐 selector(선택자)란?
#selector(tapButton)
이 부분이 바로 selector
이다.
selector
는 Objective-C에서 사용되던 개념으로, 어떤 메서드를 실행해야 할지를 가리키는 식별자(포인터)이다.
Swift에서 Objective-C와 호환되는 이벤트 처리 방식(addTarget
)에서는 이 selector 문법을 필수적으로 사용해야 한다.
#selector(tapButton)
// -> tapButton()라는 메서드의 이름을 Objective-C 스타일로 참조하는 것
🫠 @objc는 왜 붙여야 할까?
@objc
는 Swift에서 정의한 메서드를 Objective-C에서도 사용할 수 있게 허용해주는 역할을 한다.
Swift에서 만든 함수는 기본적으로 Objective-C에서 접근할 수 없다.
하지만, 우리가 사용하는 addTarget
방식은 Objective-C 런타임을 기반으로 동작하며, 이때 연결할 메서드는 selector
를 통해 참조되는데, 이 역시 Objective-C 방식이다.
즉, addTarget
이 내부적으로 Objective-C 방식으로 메서드를 호출하기 때문에, Swift 메서드를 Objective-C에서도 접근 가능하도록 표시해주는 @objc
키워드가 반드시 필요한 것이다.
😤 이제 addAction(_:)에 대해 알아보자!
iOS 14부터 기존 방식보다 훨씬 간결하고 Swift 스타일에 맞는 addAction(_:)
방식이 새롭게 등장했다.
기존에는 버튼을 눌렀을 때 동작을 처리하려면, @objc
메서드를 따로 만들고, 그걸 #selector
로 연결해야해서 코드가 분산되고 번거로웠다.
그런데! addAction
은 그냥 클로저 안에 바로 동작을 정의할 수 있다!
굳이 함수를 따로 만들지 않아도, 버튼 설정하는 그 자리에서 다 처리할 수 있는 것이다. 👍👍
let button = UIButton()
button.addAction(UIAction { _ in
print("버튼이 눌렸어요!")
}, for: .touchUpInside)
이처럼 @objc
도 없고, selector
도 없다.
Swift 코드를 작성할 때 보통 클로저를 많이 사용하기에, 이런 방식이 훨씬 자연스러운 것 같다.
다만, iOS 14 이상에서만 사용이 가능하다는 단점이 있다. 만약 하위 버전도 지원해야 하는 앱이라면 어쩔 수 없이 addTarget
을 사용해야 한다.
💬 정리
addTarget
: Objective-C 스타일의 전통적인 이벤트 연결 방식selector
: 어떤 메서드를 실행할지 Objective-C 방식으로 지정하는 포인터@objc
: Swift 메서드를 Objective-C 에서도 사용할 수 있게 표시해주는 키워드addAction
: Swift 스타일의 클로저 기반 이벤트 연결 방식(iOS 14 이상부터 사용 가능)
'📱 iOS' 카테고리의 다른 글
CodingKey로 JSON 키 매핑하기 (0) | 2025.06.19 |
---|---|
Xcode에서 시뮬레이터 추가하는 방법 (0) | 2025.06.18 |
[iOS] Push, Present 화면 전환에 대해 알아보자. (0) | 2022.02.24 |
[iOS] Xcode 코드 자동 정렬(Re-Indent), 단축키 (0) | 2021.08.31 |
[iOS] Xcode 시뮬레이터 키보드가 안보일 경우 (0) | 2021.07.29 |