View
Unity로 게임개발을 할 때도 한번 나왔던 개념인데, 그 때도 헷갈려서 자세하게는 못다루고 넘어갔던 내용이네요 ㅋㅋㅋㅋ. 그때 이해를 잘 못해놔서 게임개발을 하면서 한번도 이용한 적이 없었는데, 그 때문에 아직 쓸줄 몰라요ㅜㅜ. 이번에 제대로 공부해서 Delegate에 대해 확실히 이용하고 써먹을 수 있도록 해야겠어요. 여기저기 인터넷을 찾아보고, 부스트코스에서 강의를 들으며 나름대로 정리해서 쉽게 풀어쓴 내용입니다. 틀린 내용이 있으면 댓글로 알려주세면 감사하겠습니다!!
Delegate란?
영어단어 그대로의 의미는 '대리자'이지만, 대리자라는 의미가 한번에 와닿지는 않네요. 그래서 구글을 더 찾아봤습니다. 개발자는 이럴때 좋은 것 같아요. (구글에 개발에 대한 모든 정보가 담겨있으니까요 ㅋㅋㅋ)
델리게이트 패턴은 모든 일을 한 객체에게 맡기는 것이 아니라, 그 객체가 수행해야할 일을 델리게이트가 일부를 받아서 대신 처리해주는 것을 의미합니다. 또는, 이곳에서는 객체가 수행할 일을 부분적으로 확장해서 대신 처리한다고 말하기도 하네요.
내가 이 Class에서 사용하고자 하는 델리게이트를 골라주고 (채택해주고) 어떤 상황이 발생할 때 마다 호출될 메서드 안에 실행될 코드를 작성해두면 됩니다.
공부하면서 이 블로그를 참고했기 때문에, 여기에 나와있는 예시를 사용해 만들어봤습니다. 여기저기 찾아보고 개념 이해를 좀 더 쉽게 할 수 있게 생각해봤어요 :)
-
Class의 Delegate 채택하기
대리자로서 사용할 클래스에 UITextFieldDelegate와 같은 Delegate를 채택해줍니다. (상속이 아니라 채택의 개념이에요.) 해당 타입의 delegate로 등록한 경우, 그 타입의 특징에 맞는 이벤트가 일어날 때 마다 해당 메서드가 호출을 받을 수 있어요. (뒤에 다시 설명할거예요)
-
위임자 설정하기
객체에서 event가 일어났을 때, 이를 대신 처리해줄 위임자를 객체에서 선택해줍니다. object.delegate = something 의 형식으로 선택할 수 있어요. 즉, object에서 특정 사건이 일어나면 something에 구현된 알맞는 메서드가 자동으로 호출되어 명령을 처리하게 됩니다.
-
메서드 구현하기
특정 상황에 맞게 그에 해당하는 메서드가 자동으로 호출됩니다. 메서드 속에 수행할 내용을 채워넣어서 필요한 작업을 수행하면 되어요. 이 메서드들은 채택해준 Delegate 클래스에 미리 포함되어 있어서, 내용물만 채워주면 됩니다. 메서드를 따로 호출해줄 필요는 없고, 해당 클래스를 위임자로 등록한 객체에서 메서드에 대응되는 이벤트가 발생된 경우 호출되어요.
정리하자면, Delegate를 채택해서 어떤 일을 할 지 결정하고, 위임자를 설정해서 누가 누구 일을 대신 맡을 지 정해주고, 특정 상황에 무슨 일을 대신 해주면 되는지 작성해주면 델리게이트 디자인 패턴을 이용할 수 있습니다.
작성해준 코드로 실행한 앱입니다. 보이는 것 처럼 버튼 없이도 TextField에 작성해준 text가 Label에 옮겨가는 것을 볼 수 있죠. 왜 Hello, World!가 Hell... 이 되었는지는 아무도 모른답니다 ^^7
처음에 Delegate를 공부하고나서 머릿속에 남아있는 것은 대리자라는 것까지인데, 자료를 찾아서 쉽게 풀어쓰면서 정리해보고, 프로젝트에 실제로 넣어보는 작업을 하면서 확실하게 머릿속에 정리할 수 있는 것 같네요. 이번에도 부스트코스에서 강의를 듣고, 블로그를 찾아보며 공부한 내용들인데 확실히 강의에서 개발을 위해서는 꼭 알아야 하는 내용들을 골라서 소개를 해주고, 이에 대한 내용을 공식문서나 블로그, 첨부한 강의영성과 자료 등을 뒤져보면서 공부해나간다는 느낌이 재미있는 것 같아요. 실제로 iOS 개발 인턴을 하고있는 제 친구도 델리게이트를 사용한다고 말하는 걸 보면 후에도 꼭 필요한 내용이 아닐가 하는 생각이 드네요 ㅋㅋㅋ.
야곰님의 부스트코스 iOS 앱개발 강의에서 델리게이트를 공부할 때는 이전에 함께 만들었던 프로젝트 파일에서 썼던 코드들이 어떤 의미였는지를 다시한번 확인시켜주고, 예시 프로젝트를 함께 따라올 수 있게 하여 만들어보면서 델리게이트를 어떻게 사용해야 편한지를 잘 알려주었습니다. 돈이 드는 유료강의도 아니고, 네이버 아이디로도 이용할 수 있는 강의이니 필요하신 분은 한 번 들어보시길 바랍니다!
https://www.edwith.org/boostcourse-ios/lecture/16883/