본문 바로가기
iOS/개념

[디자인 패턴]Delegate Pattern

by MINT09 2024. 1. 27.

 

delegate pattern은 주로 화면의 전환에서 사용된다. 
화면은 어떻게 전환될까?
1번 화면과 2번 화면이 있다. 다시 말해, 1번 view controller와 2번 view controller가 있다. 

1번 view controller에서 버튼을 눌러 2번 view controller로 화면이 넘어갈 때, 1번 화면은 단순히 사라지는 것이 아니다. 2번 화면이 1번 화면의 위에 쌓이게 되는 것이다. 

이때 2번 화면이 생기면서 2번 view conroller는 초기화되어 생성되는 것으로 1번 view controller로부터 정보들을 받아오게 된다. 그런데 만일 2번 화면에서 뒤로가기 버튼으로 다시 1번 화면으로 돌아가게 되면 어떻게 될까? 1번 화면이 나오면서 새롭게 1번 view controller가 다시 초기화 되면서 생성될까?

아니다. 2번 view controller가 pop되면서 정보들이 해지되어 사라지고 밑에 깔려 있던 1번 화면이 다시 보이게 되는 것이다. 그렇다면 만일 2번 화면인 상태에서 1번 화면의 정보도 바꾸어 주고 싶다면 어떻게 해야할까? 1번 화면은 새롭게 초기화해 생성되는 것이 아닌데. 

>  바로 이런 경우에 delegate를 사용한다. <

2번 화면에서 `MINT`라는 정보를 받았다. 이를 1번 view controller에 있는 이름에 할당해주고 싶으며, 이름에 `data: MINT`를 할당하는 기능을 가진 함수는 1번 view controller에 있다. 어떻게 1번의 함수로 정보를 전달할 수 있을까? 바로 1번을 부를 수는 없는데.

때문에 프로토콜을 통한 delegate pattern을 이용해 넘겨준다. 1번 view controller는 `신상정보 protocol`을 채택한다. 때문에 `신상정보 protocol` 내부에 있는 func 이름 입력을 갖게 되고, 구현한다. 2번 view controller는 `weak var delegate`를 통해서 `신상정보` 타입으로 생성된다. 때문에 `신상정보 protocol`에 있는 `이름입력 함수`를 사용할 수 있으며 이를 통해 `mint`라는 이름 정보를 넘겨준다. 그런데 이때 `weak var delegate`로 선언해 생성한 `신상정보 protocol`에 있는 이름입력 함수가 1번 view controller에 있다는 건 어떻게 알 수 있을까? 


이는 delegate 라는 단어가 나오게 된 것과도 연관이 있다. 여기서 1번 view controller가 이름에 대한 정보를 받아오고 싶지만, 할 수 없으니 2번 view controller에게 데이터를 받아와 달라고 위임하는 것이다. 때문에 내가 이것을 위임했다고 알려줘야 한다. 

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

[iOS]Unit Test의 사용  (0) 2024.02.05
[디자인 패턴]Observer Pattern  (1) 2024.01.27