이 포스팅은 iOS BoostCourse 시리즈 23 편 중 13 번째 글 입니다.

  • Part 1 - 01: Asset, App thinning
  • Part 2 - 02: Foundation, UIKit
  • Part 3 - 03: Auto Layout
  • Part 4 - 04: View 체계
  • Part 5 - 05: 디자인 패턴
  • Part 6 - 06: MVC
  • Part 7 - 07: Apple Development Documents
  • Part 8 - 08: Human Interface Guidelines
  • Part 9 - 09: 화면 전환
  • Part 10 - 10: 뷰의 상태 변화 감지
  • Part 11 - 11: Delegation
  • Part 12 - 12: Singleton
  • Part 13 - This Post
  • Part 14 - 14: Gesture Recognizer
  • Part 15 - 15: TableView
  • Part 16 - 16: Segue
  • Part 17 - 17: Json 다루기
  • Part 18 - 18: PhotoKit
  • Part 19 - 19: 동시성, 비동기, 병렬 프로그래밍
  • Part 20 - 20: OperationQueue
  • Part 21 - 21: SchrollView
  • Part 22 - 22: Naviagtion item, Bar button item
  • Part 23 - 23: CollectionView
▼ 목록 보기

Target-Action

  • 이벤트가 발생할 때, 다른 객체에 메시지를 보내는 방법
  • 액션 : 특정 이벤트가 발생했을 때, 호출할 메서드를 의미
  • 타겟 : 액션이 호출될 객체 - 모든 객체가 될 수 있으나 보통은 컨트롤러
  • 액션 메시지 : 이벤트 발생 시 전송된 메시지

왜 사용하는가?

  • 사실 그냥 이벤트가 발생했을 때, 해당하는 객체에 접근해서 메서드를 호출하면 된다.
  • 그럼 굳이 사용하는 이유가 무엇일까?
  • 역시 디자인 패턴의 핵심은 재사용성에 가장 큰 방점이 있다.
  • 예를 들어 특정 이벤트가 발생했을 때, abc라는 이름의 메서드를 실행해야 하는 경우가 있다고 하자.
  • 그런데 이 메서드는 A 클래스에도 정의되어 있고 B 클래스에도 정의되어 있다.
  • 혹은 A 클래스의 인스턴스가 여러개인 경우도 있다.
  • 이런 경우에 일일히 이벤트가 발생했을 때 메서드를 직접 호출한다면 유지보수 측면에서 애로사항이 많을 것이다.
  • 그렇기 때문에 이러한 디자인 패턴을 사용하여 쉽고 유용하게 운용한다.

imagetarget action

Action method

  • 특정한 양식이 필요하다.
  • @IBAction 은 인터페이스 빌더가 메서드를 인지할 수 있게 해준다.
  • 프로그래밍 방식으로 사용하기 위해서는 @objc 키워드가 추가적으로 필요하다.
    • 이는 Objective-c 코드가 swift 클래스를 사용하기 위해 달아주는 것이다.
// 프로그래밍 방식
@objc func doSomething(_ sender: Any) {

}

// 인터페이스 빌더
@IBAction func doSomething(_ sender: Any) { 

}
  • 애플의 프레임워크에는 Objective-C 언어로 작성된 코드가 많기 때문에,
  • 스위프트 언어로 작성한 코드에서는 Objective-C와 호환하기 위해서 @objc 라고 표시해야 한다.
  • swift 4미만에서는 컴파일러가 자동으로 해주었지만, 4이상 부터는 명시적으로 작성해야 한다.

Reference