Delegate 패턴

E_H·2021년 5월 10일
0

Delegate패턴이란

여기서 Delegate란 대리자 란 뜻으로

zedd님의 말을 빌리면 객체지향 프로그래밍에서 하나의 객체가 모든일을 처리하는 것이 아니라 처리해야할 일들 중 일부분을 다른 객체에 넘긴다는 것이에여

예제를 보면

저는 로그인 기능을 구현하기로 해서 LoginDelegate란 프로토콜을 만들었어요

protocol LoginDelegate: class {
    func loginSuccess()
    func loginFailed(err: String)
}

LoginDelegate는 성공했을 경우와 실패했을 경우로 나누고

class LoginViewModel: NSObject {
    
    weak var delegate: LoginDelegate?

로그인처리를 하는 ViewModel에서 delegate를 선언해줍니다.

func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) {
        
        if let error = error {
            delegate?.loginFailed(err: error.localizedDescription)
        }
        
        // 사용자 정보 가져오기
        if let userId = user.userID {
            
            delegate?.loginSuccess()
            
        } else {
            print("Error : User Data Not Found")
        }
    }

로그인에 실패했을 경우 delegate의 fail메소드를
성공시엔 success메소드를 호출하여 사용하면 되용

let loginVM = LoginViewModel()

loginVM.delegate = self
extension MainViewController: LoginDelegate {
    func loginSuccess() {
        self.mainViewPresenter()
    }
    
    func loginFailed(err: String) {
        print(err)
    }
}

그리고 loginViewModel의 delegate( 대리자 )는 MainViewController가 하도록 loginVM.delegate = self로 구현해주시면 되고

해당 ViewModel을 사용하는
Controller에 Login Protocol을 채택하여
해당 프로토콜 메소드의 상황에 맞는 행동을 하시면 잘 동작합니다!

출처
https://baked-corn.tistory.com/23
https://zeddios.tistory.com/8

0개의 댓글