Swift에서 UIKit을 보게 된다면 Delegate패턴을 통하여 무언가를 개발을 하도록 되어 있다.
하지만 정작 내부 구조를 보게 되면 이해가 되지 않을 정도로 왜 이렇게 개발을 하고 어떻게 사용을 하는지
초보자들은 이해하기가 어렵다.
그래서 이번 기회에 Delegate 패턴에 공부를 해 보았고, 직접 Delegate패턴을 구현 해 보았다.
Unit이라는 클래스를 처리 하기 위해서 UnitDelegate를 만들었다.
UnitDelegate는 속도 변화, 또는 모든 값이 바뀌기만 하면 자기 자신을 반환, 그리고 현재 위치를 반환을 하도록 만들었다.
간단하게, 테스트를 하기 위해서 만들었으므로, 복잡한 상호관계를 가지지 않도록 하였다.
Unit은 본격적으로 처리를 하기 위한 형태이고, 해당 데이터가 바뀌게 된다면 UnitDelegate에 있는 함수를 호출 하도록 한다.
Unit이란 생성자가 호출이 되면 UnitDelegate에 있는 Generate란 함수가 호출이 될 것이고, 그 외에 만약
유닛을 생성을 하는 건물 이라면 생성된 유닛을 파라미터로 넘겨주면 된다.
그리고 Unit이란 데이터를 처리 하기 위한 Class인 foo를 만들었다.
Swift에서는 아마 ViewControler가 되지 않을까? 란 생각을 해본다.
(C#에서 Main에 하고 싶었으나 Entry Point는 Static, 정적이여야 하기 때문에 바로 구현하기에 코드가 바뀌는 부분이 많아 새로운 클래스 foo를 만들었다.)
foo를 만들었고, Unit를 초기화 하고, unitDelegate의 값을 this, 즉 자기자신으로 하였다.
자기 자신으로 할려면 foo 가 UnitDelegate타입 이 아니므로 오류가 난다고 말하고 있으므로.
UnitDelegate를 상속받으면 된다.
UnitDelegate를 상속을 받게 된다면 하나의 문제가 발생한다. 바로 UnitDelegate가 구현이 되어 있지 않기 때문이다.
아래의 사진처럼 구현을 해주게 된다면 이제 Unit의 데이터를 처리를 하는 foo 클래스가 만들어 진 것이다.
C#와 많이 다른 느낌이다. C#같은 경우에 Button은 이미 Button, 자기 자신이 Delegate이며, 내부적으로 처리를 다하고
이벤트를 발생하는 느낌이다.
C# 형식
ex) Unit.Clicked += foo.clicked 로 이벤트를 처리
Delegate 패턴 :
ex) Unit.delegate = this
ex) Unit의 모든 이벤트를 전달 받음.
'차장님의 이야기' 카테고리의 다른 글
Docker를 이용한 Visual Studio Code Server 만들기 (0) | 2020.07.24 |
---|---|
언어는 도구이다.. (0) | 2020.07.08 |
SwiftUI에서 Modal 띄우기 성공 (0) | 2020.07.07 |
Cue 파일 읽고, 파일 분리 작업 완성 (0) | 2020.06.29 |
macOS용 음원 파일 관리 프로그램 제작 #1 (0) | 2020.06.23 |