iOS/Swift

Swift) Delegate, Notification 둘 중 어느 것을 사용해야 할까

Brad_Heo 2022. 10. 12. 21:44

앱에서 화면 간 데이터 전달을 위해 여러 방식이 있는데 대표적으로 Delegate와 Notification이 있는데 둘 중에 어떠한 상황에서 어떤 것을 쓰는게 좋을까 생각해 보았다.

일단 각 패턴에 대해 알아보자

Delegate

Delegate 패턴은 다른 객체의 인스턴스를 내부적으로 가지고 있어 그 인스턴스를 활용하는 방식으로 사용

Notification

값의 변화에 따라 이벤트가 발생해야할 때 이것을 observe 하고 있는 방식으로 사용

구현 방법 및 사용방법

Delegate

Delegate를 위한 프로토콜이 필요하다. 이벤트 처리 담당 객체가 알고 있어야함

Notification

값의 변화가 필요한 값에 observe하고 그에 맞는 이벤트만 발생시켜주면 됨

각 패턴의 장단점

Delegate

장점

  • 프로토콜에 필요한 메소드들이 명확하게 명시.
  • 프로토콜에 정의되어 있는 메소드들을 구현하지 않으면 컴파일 시 에러
  • 모니터링하고 있는 객체(NotificationCenter)가 필요하지 않음

단점

  • 구현 시 많은 줄의 코드가 필요
  • 많은 이벤트들을 발생시키려면 어렵고 비효율적

Notification

장점

  • 많은 줄의 코드가 필요없이 쉽게 구현 가능
  • 다수의 객체들에게 동시에 이벤트를 전달할 수 있음
  • Notification과 관련된 정보를 Any? 타입의 object, [AnyHashable: Any]? 타입의 userInfo로 전달할 수 있음

단점

  • 컴파일 시 구독이 잘되고 있는지, value를 받아오는지 확인이 어려움
  • Notification의 post이후 그에 대한 응답 정보를 받기 어려움

그럼 어떤 것을 사용해야 할까??

정리하자면 많은 객체들에게 이벤트를 전달해야 할 경우 Notification을 사용하고, 그 외에는 코드의 흐름을 이해하기 쉽고, 추적이 쉬운 Delegate를 사용하는게 좋을 것 같다.

'iOS > Swift' 카테고리의 다른 글

Swift) NumberFomatter  (0) 2022.12.02
Swift) 옵저버 프로퍼티를 이용한 데이터 바인딩  (0) 2022.10.18
Swift) Realm 연동하기  (0) 2022.10.12
Swift) SwiftLint 적용  (0) 2022.09.10
Swift) DatePicker  (0) 2022.09.10