본문 바로가기
Xcode/Swift - PlayGround

PlayGround) Delegate에 대해서 알아보자

by 후르륵짭짭 2020. 7. 4.
728x90
반응형

구텐탁!

안녕하세요 후르륵짭짭 입니다.

오늘 배워 볼 것은 Delegate란 무엇일까? 입니다.

사실 저도 delegate가 무엇인지 잘 모르고 지금 까지 TableView와 ScrollView 등 많은 부분에서 사용했습니다.

일단 Delegate는 쉽게 말하면 규약을 주는 겁니다.

그러니깐,,,, 이렇게 해야한다고 명령을 주고 우리는 그것을 따라하면 되는겁니다!

프로토콜이라고 생각하시면 편해요!

프로토콜(Protocol)이 바로 규약이라 할 수 있어요!

medium.com/@kimtaesoo188/swift-4-2-protocol-공식-문서-정리-f3a97c6f8cc2

 

Swift 4.2 Protocol 공식 문서 정리

원문

medium.com

여기를 통해서 프로토콜의 쫌 세세한 부분을 공부 했지만,,, ㅋㅋㅋ 아직은 잘 몰라서 나중에 자세히 공부 해보겠습니다!

일단 Delegate를 알기 전에 프로토콜에 대해서 알아야합니다!

** 프로토콜 - Protocol **

프로토콜이란, 사전에 단어를 검색하면 의례, 통신 규약 등으로 정의하고 있습니다.

넵! 맞습니다. 프로토콜이란 규약이라 생각하면 편합니다.

JAVA를 배워 보신 분이 있다면, JAVA의 Interface랑 같다고 보면 됩니다.

protocol StudentInfoSheet {
    var studentID : String { get set}
    var studentname : String {get}
    func GetName() -> String
    func GetAge() -> Int
}

이렇게 보면 함수랑 변수 들이 있는데, 그냥 틀만 있고 어떠한 정의가 내려져 있지 않습니다. 

넵! 이렇게 그냥 틀만 주는 거에요. 그리고 이것을 따라 만들어라 이렇게 해주는 거죠!

이때 주의하실 것은 변수 같은 경우는 var 로 선언해주셔야 합니다!

그리고 아래의 사진을 본다면

StudentInfo 구조체에서 StudnetInfoSheet을 따르게 되고

StudnetInfoSheet에 있는 모든 것들이 따라 내려와서 구체적으로 작성 된 것을 확인 할 수 있습니다. 

그럼 이걸 왜 쓰냐,,,

사실 저도 혼자 개발 해서 딱히 쓴 적은 없지만,,,, 협업을 하게 된다면 함수의 기능이 조금씩 달라져야할 때?  머 이럴 때 사용 할 것 같지만 정확 한건 아니에요 ㅎㅎㅎ

그래서 포로토콜은 결국! 규약을 주고 그 규약에 따라서 구조체나 클래스를 만들어라 입니다!!

** Delegate ** 

자 이제 본격적으로 Delegate 에 대해서 설명하겠습니다.

사실 Delegate도 프로토콜 처럼 규약이랑 같은 겁니다.

이 코드를 보면 Person 클래스에 StudentInfoSheet형인 delegate 와 이름을 출력하는 printName() 그리고 나이를 출력하는 printAge()가 있습니다.

그리고 우리가 흔히 사용하는 뷰 컨트롤러를 흉내낸 viewController가 있고 이 viewController는 StudnetInfoSheet 프로토콜을 받고 있습니다.

그래서 StudnetInfoSheet에 있는 모든 규제사항들이 적혀 있죠! 규제를 내림 받았으니 깐요!!!

그리고 viewController의 생성자 안에 Person() 클래스를 가지는 student.delegate를 현재 StudnetSheetInfo를 내림받은 viewController로 넣어줍니다.

이렇게 되면 Person클래스의 delegate = viewController가 되는거죠!

그리고 viewController의 GetName()과 GetAge()를 구체적으로 해주면 PrintName()에서 viewController의 GetName의 함수를 불러오게 됩니다.

만약에 student.delegate를 안해주면 어떻게 될까요?

student.delegate가 nil이니 아래 처럼 결과가 나올 겁니다!

 

** 결론 **

결론은 tableView의 datasource 프로토콜을 받으면 

datasource의 필수 내용 정보를 받아 옵니다.

그것을 정의해주면 그 대로 수행이 되는 거죠!

참 쉽조잉?

저도 사실 잘은 모르지만, 일단 끄적여 봅니다.

즐코 하세요!

728x90
반응형

댓글