Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Communication Pattern들에 대하여 설명해주세요. #33

Open
0Hooni opened this issue Jan 12, 2025 · 4 comments
Open

Communication Pattern들에 대하여 설명해주세요. #33

0Hooni opened this issue Jan 12, 2025 · 4 comments

Comments

@0Hooni
Copy link
Collaborator

0Hooni commented Jan 12, 2025

No description provided.

@youn9k
Copy link
Collaborator

youn9k commented Jan 16, 2025

객체들간의 Communication Pattern 들로는 Delegate, Notification, KVO 방식이 있는 것으로 알고 있습니다.

Delegate

Delegate는 대리자, 위임자 라는 뜻으로 한 객체에서 처리해야 할 일 중 일부를 프로토콜로 분리해 다른 객체가 채택하고 대신 처리하도록 위임하는 패턴을 말합니다. Delegate 패턴은 프로토콜로 구현되기 때문에 재사용성이 뛰어나고 객체지향적이란 장점이 있지만, 작성해야 하는 코드양이 많고 위임받을 객체가 nil이 될 수 있어 개발자가 주의해 작성해야한다는 단점이 있습니다.

Notification

Notification은 NotificationCenter라는 싱글톤 객체를 사용해 특정 이벤트를 구독하고 있는 사용자들에게 이벤트를 전달하는 방식입니다.
Notification은 작성해야 하는 코드 양이 적고 객체의 의존 구조와 상관없이 아무 객체 간의 소통이 가능해 사용하기 편하다는 장점이 있습니다. 하지만 남발하다보면 이벤트 발행의 주체와 시점 등을 파악하기 어려워지며 이벤트 전달은 이벤트의 이름과 담긴 데이터의 key값에만 의존하기 때문에 실수가 발생할 가능성이 있고 흐름 추적이 어렵다는 단점이 있습니다.

KVO

KVO는 Key-Value Observing의 약자로, 객체의 프로퍼티의 변경사항을 다른 객체에게 알릴 수 있는 패턴입니다.
옵저빙하고 싶은 프로퍼티에 keypath를 통해 옵저버를 추가할 수 있으며 이전 값과 변경된 값을 쉽게 관찰할 수 있으며, 객체의 구현을 변경하지 않고 내부 프로퍼티의 변경사항을 옵저빙할 수 있다는 장점이 있습니다. 하지만 didSet이나 wiiSet과 같은 프로퍼티 옵저버는 struct에도 사용가능한 반면 KVO는 NSObject를 상속한 클래스에서만 사용할 수 있어 Dispatch 관점에서 성능 차이가 발생할 수 있을 것 같습니다.

@hsw1920
Copy link
Owner

hsw1920 commented Jan 16, 2025

Swift에서 Communication Pattern은 객체 간 데이터나 이벤트를 전달하기 위해 사용하는 방법들을 의미합니다.

Swift에서는 주로 Delegate, NotificationCenter, Closure, Combine 등을 통해 이를 구현할 수 있습니다.

Delegate 패턴은 주로 1:1 관계에서 사용되며 한 객체의 어떤 작업을 다른 객체가 대신 처리하도록 책임을 위임하는 패턴입니다.

NotificationCenter는 1:N 관계에서 사용되며 싱글톤으로 구현된 NotificationCenter를 통해 App 내에서 전역적인 이벤트를 post로 등록하고 이를 addObserver한 여러 객체에서 이벤트를 전달받을 수 있습니다.

Closure는 주로 1:1 관계에서 사용되며 콜백을 통해 이벤트를 전달합니다. 클로저를 통해 호출된 코드 블럭 내에서 작업을 처리할 수 있습니다.

Combine은 iOS에서 제공하는 비동기 데이터 스트림을 관리하는 프레임워크로 여러 퍼블리셔와 send와 sink를 통해 객체간 통신을 주고받으며 처리할 수 있습니다.

@Kiyoung-Kim-57
Copy link
Collaborator

Communication Pattern 이란 객체 간 상호작용 에 대한 규칙 또는 방식을 말합니다.
Swift에서 주로 쓰이는 방식은 Delegate Pattern, Observer Pattern, Callback Pattern 이 있습니다.

Delegate 패턴은 객체 간의 1대1 상호작용에 사용됩니다. Delegate는 위임하다라는 뜻으로 하나의 객체가 필요한 행동을 다른 객체에 위임하여 처리합니다.

Observer 패턴은 객체의 상태 변화를 감지하여 이를 구독하고 있는 다른 객체들에게 상태 변화를 알리는 패턴입니다. Swift에서는 Notification Center를 통해 구현할 수 있습니다.

Callback 패턴은 주로 비동기 프로그래밍 상황에서 작업이 완료된 이후 클로저를 통해 결과를 전달하고 원하는 동작을 실행할 수 있도록 하는 패턴입니다. Swift에서는 탈출 클로저를 이용해 두 객체간에 비동기 프로그래밍의 결과를 전달하는데 사용합니다.

@0Hooni
Copy link
Collaborator Author

0Hooni commented Jan 17, 2025

🙋🏻 답변

커뮤니케이션 패턴은 소프트웨어에서 객체나 컴포넌트간에 상호작용 방식을 정의하는 방식을 의미합니다. Swift 소프트웨어 개발에서 다양한 커뮤니케이션 패턴이 존재하며 대표적으로 콜백 패턴, 델리게이트 패턴, 옵저버 패턴, 퍼블리셔-서브스크라이브 패턴 등이 존재합니다.

콜백 패턴은 함수의 인자로 클로저를 전달하여 비동기 작업에서 콜백 처리를 할 때 주로 사용되며, 델리게이트 패턴은 프로토콜을 통해 한 객체가 다른 객체에게 작업을 위임하는 방식으로 단방향성이 있습니다.

옵저버 패턴은 노티피케이션센터를 이용하여 여러 객체가 동일한 이벤트를 수신할 수 있게 해주는 브로드캐스팅 방식으로, 객체간 느슨한 결합을 유지하는 데 유용하며, 퍼블리셔-서브스크라이버 패턴은 컴바인과 같은 프레임워크를 통해 반응형으로 데이터 흐름을 관리할 수 있는 상호 작용 방식입니다.

Swift에서는 이러한 패턴들을 적절히 활용하여 코드의 재사용성과 유지보수성을 높일 수 있습니다.

🏷️ 키워드

콜백, 델리게이트, 옵저버, 펍섭, 클로저, 노티센터, 컴바인, 재사용성, 유지보수성

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants