-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Delegate 패턴을 활용하는 경우를 예를 들어 설명하시오. #11
Comments
Delegate 패턴을 활용하는 경우를 예를 들어 설명하시오.
weak var delegate: UITableViewDelegate? { get set } Delegate Pattern 장점
Delegate Pattern 단점
Delegate Patternenum Menu {
case Macchiato
case Latte
case Americano
}
protocol MachineViewDelegate: AnyObject {
func didSelectedCoffee(menu: Menu) -> Menu
}
class Machine {
weak var delegate: MachineViewDelegate?
func makeCoffee(menu: Menu) {
self.delegate?.didSelectedCoffee(menu: menu)
print("\(menu) 커피를 만들어 주었습니다.")
}
}
class Barista: MachineViewDelegate {
init(coffeeMachine: Machine) {
coffeeMachine.delegate = self
}
func didSelectedCoffee(menu: Menu) -> Menu {
print("바리스타는 커피 머신의 \(menu)를 선택하였습니다.")
return menu
}
}
let jennyMachine: Machine = Machine()
let jennyBarista: Barista = Barista(coffeeMachine: jennyMachine)
jennyMachine.makeCoffee(menu: .Americano) 📝 참고 사이트 |
Delegate Pattern프로토콜을 이용해서 클래스나 구조체가 자신의 권한을 다른 타입의 인스턴스에게 위임하여 일을 처리하는 방식의 디자인 패턴 Delegate 패턴의 활용 예
Delegate 패턴을 사용하는 이유
📝참고 |
Delegate 패턴이란
이벤트 제어권에 대한 책임을 정의하는 delegate 프로토콜을 정의한다protocol DelegateProtocol {
func tappedButton(value: String)
...
} 위임해주는 객채는 delegate라는 위임자 프로퍼티를 가진다class Delegator {
var delegate: DelegateProtocol?
lazy var button: UIButton = {
let button = UIButton()
button.addTarget(self, action: #selector(tappedButton), for: .touchUpInside)
return button
}()
init() {}
@objc func tappedButton() {
delegate?.tappedButton(value: "Tapped Button")
}
} 위임받는 객체는 이 delegate 프로토콜을 채택하고 내부에 정의된 메서드를 구현한다class Delegatee: DelegateProtocol {
var delegator = Delegator()
init() {
delegator.delegate = self
}
func tappedButton(value: String) {
print("value: ", value)
}
} 위임해주는 객체의 위임자 프로퍼티인 delegate는 weak 키워드로 선언하는 것이 좋다위임받는 객체(delegatee)에서 위임해주는 객체(delegator)의 delegate에 위임받는 객체를 참조하게 하는 순간( 이 때문에 delegate 프로토콜 타입을 protocol DelegateProtocol: AnyObject {
func tappedButton(value: String)
...
}
class Delegator {
weak var delegate: DelegateProtocol?
...
Delegate 패턴을 사용하는 이유iOS 에서 delegate 패턴은 어떤 뷰의 이벤트에 대한 처리를 다른 뷰에서 해줄때 사용할 수 있는 유용한 패턴이다. delegate 패턴을 사용하지 않게 될 경우, 전역변수를 사용한다거나 📝 참고 사이트 |
Delegate 패턴어떠한 객체가 해야할 일을 다른 객체에게 위임하는 것
Delegate 패턴 만들기*UITextFieldDelegate 사용
class ViewController: UIViewController, UITextFieldDelegate {
let textField = UITextField()
override func viewDidLoad() {
super.viewDidLoad()
// delegate를 대리자로 설정해주기
self.textField.delegate = self
}
}
// 텍스트필드가 뷰컨에게 "작업이 끝났어 END 입력해" 라고 전달
func textFieldDidEndEditing(_ textField: UITextField) {
textField.text = "END"
}
// 텍스트필드가 뷰컨에게 "리턴버튼 누르면 키보드 내려도 돼" 라고 전달
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
} ->실제로는 UITextField의 동작이지만 ViewController가 메서드를 전달받아 대신 작업을 한다. Delegate 패턴 사용 장점
Delegate 패턴 사용 단점
📝 참조 |
No description provided.
The text was updated successfully, but these errors were encountered: