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

[레벨1] 11주차 7. iOS에서 델리게이트 패턴(Delegate Pattern)은 어떤 목적으로 사용되나요? #21

Open
longlivedrgn opened this issue Jun 19, 2024 · 1 comment
Assignees
Labels

Comments

@longlivedrgn
Copy link
Contributor

  • 델리게이트 패턴과 콜백 함수의 차이점은 무엇인가요?
  • 델리게이트 패턴과 옵저버 패턴의 차이점은 무엇이고 각각 어떨때 사용하면 좋나요?
  • 델리게이트 메서드에서 반환값을 사용하는 경우는 언제인가요?
@longlivedrgn longlivedrgn self-assigned this Jun 19, 2024
@SunnnySong
Copy link

1️⃣ iOS에서 델리게이트 패턴(Delegate Pattern)은 어떤 목적으로 사용되나요?

델리게이트 패턴, Delegate Pattern

  • 객체의 책임을 다른 객체에게 위임하는 디자인 패턴이다.
  • 아래와 같은 객체들이 존재한다.
    1. 책임 위임을 요청하는 객체
    2. 위임할 책임을 캡슐화하는 프로토콜
    3. 델리게이트 프로토콜을 채택하고 위임된 책임을 제공하는 객체
  • 일대일 통신(단방향 통신)을 지원한다.

사용 예시

  • View와 Controller 간 상호작용을 위해 사용한 경험이 있다.
    • View는 사용자 이벤트를 감지하고 해당 이벤트를 델리게이트 프로토콜로 Controller에게 넘기면, Controller는 비지니스 로직을 실행한다.
      • View가 책임을 Controller에게 위임

2️⃣ 델리게이트 패턴과 콜백 함수의 차이점은 무엇인가요?

  • 델리게이트는 프로토콜을 통해 인터페이스를 정의하고, 콜백 함수는 클로저를 사용해 두 객체 간 통신한다.

3️⃣ 델리게이트 패턴과 옵저버 패턴의 차이점은 무엇이고 각각 어떨때 사용하면 좋나요?

옵저버 패턴, Observer pattern

  • iOS에서 옵저버 패턴은 Notification Center를 이용한다.
  • 데이터 전송 객체는 Notification message를 전송하고, 데이터를 받는 객체는 Notification을 관찰해 필요한 동작을 수행한다.
  • 일대다 통신을 지원한다.

옵저버 패턴과 델리게이트 패턴의 차이점

  • 델리게이트 패턴은 어떤 객체에게 위임하는지 명시적으로 알고 있기 때문에 객체 간 직접적인 연결이 있다.
    • 데이터를 받는 객체에서 데이터를 보내는 객체를 알고 있다.
    • == 강한 참조 생성
  • Notification Center를 중간 매개체로 객체간 약한 결합도를 유지한다.
    • 데이터를 받는 객체에서 데이터를 보내는 객체를 모른다.
    • 발송자와 수신자 간 직접적인 연결이 없다.

4️⃣ 델리게이트 메서드에서 반환값을 사용하는 경우는 언제인가요?

  • 예시) UICollectionViewDelegate

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        return CGSize(width: 100, height: 100)
    }
    • collectionView에 들어가는 아이템의 크기를 반환하여 레이아웃을 결정한다.

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

No branches or pull requests

2 participants