Delegate : 한 객체가 할 일을 대신 위임 받은 객체를 말합니다. 이 때 위임을 받을 수 있는 객체는 위임을 넘겨줄 객체가 정의한 프로토콜을 준수하는 객체에만 한정 됩니다.
Protocol : 일종의 자격증이라 생각하면 됩니다. 이 자격증(Protocol)을 준수하며 자격증에서 요구하는 기준에 따라 자신(대리자)의 필요에 맞는 기능을 구현하면 됩니다. 위임할 객체는 위임 받을 객체가 자신이 규정한 자격증(Protocol)을 가졌을 때만 위임자(대리자)로 지정 할 수 있다는 것을 다시 기억해주세요.
데이터 클래스에서 필요한 것
1. 델리게이트 프로토콜 선언 및 필요한 메서드 선언
2. 데이터 클래스 안에 델리게이트 변수, 데이터 변수, 델리게이트에게 데이터를 이용한 프로토콜 메서드 사용하도록 하는 코드의 3가지 부분 필요
// 데이터 클래스 문서
// 데이터 클래스의 프로토콜 선언(이 데이터 클래스를 사용할 수 있게해주는 자격증!)
protocol DataClassDelegate {
func technicOne(number: Int){} // number 데이터를 사용하기 위해서는 꼭 technicOne이라는 이름을 가진 메서드를 구현해야함
//메소드의 인자는 이 프로토콜을 채택한 Delegate에게 처리를 위임할 데이터를 넣어줌
}
// 데이터 클래스
class DataClass {
var delegate: DataClassDelegate? // 데이터 클래스를 사용할 클래스명(DataclassDelegate 프로토콜을 선언한 클래스의 이름)
let foo: Int // 정수 데이터
delegate?.technicOne(foo) // 정수 데이터를 담아서 사용 신청을 한 클래스에 전달& 해당 클래스에서 구현한 technicOne 메소드에 맞게 데이터를 사용하도록 함
}
위와 같이 델리게이트 프로토콜을 구현해 놓으면 아래에서 예시를 든 클래스 외에도 어느 클래스든 델리게이트 프로토콜을 확장함으로 쉽게 데이터를 가져다 쓸 수 있습니다. 따라서 매번 번거롭게 데이터 클래스의 구현 부분을 사용할 클래스 하나하나를 위해 변경하지 않아도 됩니다.
데이터 클래스를 사용할 클래스에서 필요한 것
1.데이터 클래스의 인스턴스 생성 및 델리게이트 self로 지정
2. 델리게이트 프로토콜의 메서드 구현
// 데이터 클래스를 사용할 유저 클래스
class userClass: dataClassDelegate {
let dataClass = DataClass() // 데이터 클래스의 인스턴스 생성
dataClass.delegate = self // 데이터 클래스의 대리인을 유저클래스로 설정
func technicOne(number: Int){ // 프로토콜에서 요구하는 메서드 구현
print(number)
}
}
'Swift' 카테고리의 다른 글
Swift - Extension (0) | 2020.01.14 |
---|---|
Swift - Double형 데이터를 String으로 포멧 지정하여 나타내는 법 (0) | 2020.01.10 |
Swift - 함수의 Input과 return에 함수 넣기, 간단한 Closure (0) | 2020.01.02 |
Swift - String을 Float으로 캐스팅 하는 법 (0) | 2019.12.06 |
Swift - 옵셔널 (0) | 2019.12.06 |