앱에서 화면 간 데이터 전달을 위해 여러 방식이 있는데 대표적으로 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 |