본문 바로가기
iOS/iOS

Delegate 패턴이란?

by 황민우 2022. 2. 26.

정의

- 객체지향 프로그래밍에서 하나의 객체가 모든 일을 처리하는 것이 아니라, 작업의 일부를 다른 객체에 넘기는 것

- (※공식적인 명칭 아님) 책임자(수신자), 준비자(대리자), 대리자에게 수신자 자신을 전달하는 3가지가 필요합니다. 

- Delegate 패턴의 장점으로 코드의 재사용과 유지보수가 용이합니다.


예시

protocol

- tactics라는 이름의 프로토콜을 생성하겠습니다.

- 해당 프로토콜은 Cornerkick, Freekick이라는 메서드를 갖고 있습니다.

protocol tactics: class {
    func Cornerkick()
    func Freekick()
}

 

Class 1 : 책임자

- 책임자의 역할을 할 HeadCoach라는 클래스를 생성하겠습니다.

- 해당 클래스에서는 일을 위임할 delegate변수와 일을 시키는 order( ) 함수가 작성되어 있습니다.

- delegate변수의 자료형으로 tactics 프로토콜을 사용해, 이 delegate변수(위임자)가 프로토콜의 메서드를 실행시킬 수 있습니다.

- order( ) 함수는 delegate변수를 통해 tactics프로토콜의 메서드들을 실행시킬 수 있습니다.

class HeadCoach{
    weak var delegate: tactics?
    
    func order(){
        self.delegate?.Cornerkick()
        self.delegate?.Freekick()
    }
}

 

Class 2 : 준비자

- tactics프로토콜의 채택하여 프로토콜 내의 메서드를 구현할 클래스를 생성했습니다.

- 두 클래스 모두 공통적으로 director.delegate = self라는 코드가 작성되어있습니다.

- 해당 코드책임자(HeadCoach)가 시키는 일을 자신이 처리하겠다고 명시한 것으로, 코드가 작성된 자신이 위임자의 일을 대신해서 처리하겠다는 의미입니다. ( 위임자의 delegate변수와 자신을 연결해주는 코드 )

class FirstTactics: tactics{
    init(director: HeadCoach){
        director.delegate = self
    }
    
    func Cornerkick() {
        print("First Half Corner Kicker : Hargreaves")
    }
    
    func Freekick() {
        print("First Half Free kicker : Gerrard")
    }
}

class SecondTactics: tactics{
    init(director: HeadCoach){
        director.delegate = self
    }
    
    func Cornerkick() {
        print("Second Half Corner Kicker : Cole")
    }
    
    func Freekick() {
        print("Second Half Free kicker : Beckham")
    }
}

 

객체

- 책임자로 Eriksson이라는 감독을 생성하였고, 두 개의 클래스를 각각 상수에 할당했습니다.

- Eriksson 감독에 지시에 따라 FirstHalf-Tactics, SecondHalf-Tactics의 일을 처리합니다.
- 전체코드를 보면 Eriksson이라는 HeadCoach(책임자)는 함수내의 값들을 직접 명시하지 않고,

각각 일을 위임받은 FirstTacticsSecondTactics 준비자들이 준비한 방법을 처리만 하였습니다.

let Eriksson = HeadCoach()

let FirstHalf = FirstTactics(director: Eriksson)
Eriksson.order()
let SecondHalf = SecondTactics(director: Eriksson)
Eriksson.order()

실행결과
// First Half Corner Kicker : Hargreaves
// First Half Free kicker : Gerrard
// Second Half Corner Kicker : Cole
// Second Half Free kicker : Beckham

내용 출처

https://velog.io/@iwwuf7/Swift-Delegate-Pattern%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C

 

[Swift] - Delegate Pattern에 대해서

Delegate 패턴은 iOS의 Cocoa Framwork에서 매우 빈번하게 등장합니다. 그 만큼 반드시 알고 있어야 하는 패턴이기도 합니다.Delegation의 정의는 다음과 같습니다.Delegation is a way to make composition as pow

velog.io

https://velog.io/@zooneon/Delegate-%ED%8C%A8%ED%84%B4%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C

 

[iOS] Delegate 패턴이란 무엇일까?

유명하고 자주 사용되는 Delegate 패턴에 대해 알아봅시다.

velog.io

 

'iOS > iOS' 카테고리의 다른 글

스토리보드의 장단점  (0) 2022.03.01
Delegate,Block,Notification,KVO  (0) 2022.02.28
Frame과 Bounds의 차이  (0) 2022.02.25
Class와 Struct의 차이  (0) 2022.02.25
as, as?, as!의 차이  (0) 2022.02.24

댓글