티스토리 뷰

Design Pattern

Delegation Pattern

강경 2021. 5. 24. 23:36
728x90
반응형

여러가지 디자인 패턴에 대해 하나씩 정리할 예정인데,
그 첫 번째로 Delegation패턴을 준비해 보았습니다🤗


✅ Delegate?

  1. 명사: (집단의 의사를 대표하는) 대표(자)
  2. 동사: (권한업무 등을) 위임하다

Delegate라는 단어의 뜻에서 예측할 수 있듯,
델리게이션 디자인 패턴은
대표로 지정된 객체가 다른 객체를 대신해 동작 또는 조정할 수 있는 기능을 제공해요😲
실생활의 예로, 사장과 비서가 있다고 봅시다..!

// 비서는 CEO가 할 일을 대신해줌
// 비서에게 CEO의 권한과 할 일을 위임(Delegate)
// CEO가 어떠한 요청을 보낼 때, 비서가 어떤 일을 할 지를 미리 협약해야함 -> protocol로!
protocol secretarial {
  // CEO는 비서에게 뭐(검색키워드)좀 찾아서 알려달라고 할 수 있다.
  func search(keyword: String) -> String
  // CEO는 비서에게 어디(목적지)로 운전해달라고 할 수 있다.
  func drive(destination: String)
}

struct CEO {
  var secretary: secretarial?
}

struct Jarvis: secretarial {
  func search(keyword: String) -> String
  func drive(destination: String) 
}

struct Potts: secretarial {
  func search(keyword: String) -> String
  func drive(destination: String)
}

let TonnyStark: CEO = CEO()
// '비서'능력만 가지고 있으면, 누구나 비서역할을 할 수 있음
TonnyStark.secretary = Jarvis()
TonnyStark.secretary = Potts()

비서가 해야할 일을 protocol로 만들어 둔 다음,
사장은 해당 protocol을 만족하는 비서(객체)에게 비서 일을 시킬 수 있게돼요!
이렇듯, Delegation Design Pattern
어떤 인스턴스가 해야 할 일을 다른 인스턴스에게 시키는 디자인 패턴이에요⛏

✅ 실제로 사용하는 프로토콜 예시

protocol UITextFieldDelegate {
  // 대리자에게 특정 텍스트 필드의 문구를 편집해도 되는지 묻는 메서드
  func textFieldShouldBeginEditing(UITextField)

  // 대리자에게 특정 텍스트 필드의 문구가 편집되고 있음을 알리는 메서드
  func textFieldDidBeginEditing(UITextField)

  // 특정 텍스트 필드의 문구를 삭제하려고 할 때 대리자를 호출하는 메서드
  func textFieldShouldClear(UITextField)

  // 특정 텍스트 필드의 `Return` 키가 눌렸을 때 대리자를 호출하는 메서드
  func textFieldShouldReturn(UITextField)
}

위의 각 함수들은
특정 상황에 대해 물어보고, 알려주고, 호출하는 역할을 하고있네요!
물어보고 답변을 듣는(?) 목적을 가지고 있는 것이죠~~




여기까지..! Delegation Design Pattern의기초적인 부분을 정리해 보았어요!
iOS에서 자주 쓰이는 Table View같은 개념도 적을까 하다가
관련 내용은 따로 적는게 나을거 같더라고요📝


이해가 안되는 부분이나, 틀린 부분이 있으면 코멘트를 남겨주세요!
피드백은 정말정말 환영입니다🎉🎉

Reference

야곰🐻의 Naver Boostcourse
야곰🐻의 멋진 강의

728x90
반응형

'Design Pattern' 카테고리의 다른 글

[SOLID] 객체 지향 프로그래밍(OOP)  (2) 2021.03.26
[SOLID] 가치와 원칙  (0) 2021.03.26
MVVM  (0) 2021.01.07
MVC  (0) 2021.01.07