티스토리 뷰
728x90
반응형
여러가지 디자인 패턴에 대해 하나씩 정리할 예정인데,
그 첫 번째로 Delegation패턴을 준비해 보았습니다🤗
✅ Delegate?
- 명사: (집단의 의사를 대표하는) 대표(자)
- 동사: (권한업무 등을) 위임하다
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
728x90
반응형
'Design Pattern' 카테고리의 다른 글
[SOLID] 객체 지향 프로그래밍(OOP) (2) | 2021.03.26 |
---|---|
[SOLID] 가치와 원칙 (0) | 2021.03.26 |
MVVM (0) | 2021.01.07 |
MVC (0) | 2021.01.07 |