ios 앱 개발
Delegate 패턴
짤진이
2025. 3. 26. 16:59
반응형
패턴(Pattern)이란?
- 패턴이란 반복해서 나타나는 사건이나 형태를 의미한다. 보통 예측 가능한 방식으로 되풀이된다는 점에서 의미가 있다.
- 객체지향 프로그래밍에서는 디자인 패턴(Design Pattern)이라는 합성 용어로 사용된다.
- 객체지향 프로그래밍에서 객체 간의 관계를 구조화한 사례가 일반화된 것이 바로 디자인 패턴이다.
GoF(Gang of Four)라고 불리는 네 명의 컴퓨터 공학자들에 의해 정의된 패턴들이 있다.
- 팩토리 패턴(Factory Pattern)
- 옵저버 패턴(Observer Pattern)
- 싱글톤 패턴(Singleton Pattern)
- 이터레이터 패턴(Iterator Pattern)
- 델리게이트 패턴(Delegate Pattern)
델리게이트 패턴
- iOS앱의 대부분 객체는 델리게이트 패턴(Delegate Pattern)이라는 일종의 위임 패턴을 사용한다. 이 패턴은 iOS앱 코드의 전반적 구조를 이루는 아주 중요한 패턴이다.
- 기존에 다른 진영의 개발을 많이 했던 개발자 입장에서도 생소한 패턴이므로 연습이 많이 필요하다.
항목 선택 구현– UIPickerView
- UIPickerView컨트롤을 사용하는 경우 UIPickerViewDataSource, UIPickerViewDelegate프로토콜을 구현
- picker라는 이름으로 아웃렛을 추가
- 배열을 하나 추가하고, 현재 뷰컨트롤러가 위임받았음을 명시한다. delegate속성과 dataSource속성을 둘 다 명시한다.
-
UIPickerViewDataSource, UIPickerViewDelegate프로토콜을 채택하고 필수 메서드를 구현하지 않으면 에러가 발생한다.
//
// ViewController.swift
// DemoPickerView
//
//
import UIKit
class ViewController: UIViewController,
UIPickerViewDelegate,
UIPickerViewDataSource {
//배열 준비
var device = ["아이폰", "아이패드","윈도우폰","안드로이드"]
@IBOutlet var picker: UIPickerView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
//누가 위임받았는지 지정
picker.delegate = self
picker.dataSource = self
}
func numberOfComponents(in pickerView: UIPickerView) -> Int {
//컬럼의 숫자
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return device.count
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return device[row]
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
print(device[row])
}
}
메세지 알림창 구현 – UIAlertView
- UIAlertView는 iOS앱에서 각종 메세지를 출력하는 용도로 사용하는 뷰이다. iOS 9.*부터는 UIAlertController를 사용해야 한다.
- 단순한 텍스트 메세지를 전달하고자 사용하기도 하지만 보통은 예, 아니오 또는 그 이상의 항목을 선택할 수 있는 버튼을 제공해서 사용자의 의도를 입력받기도 한다.
//
// ViewController.swift
// DemoPickerView
//
//
import UIKit
class ViewController: UIViewController,
UIPickerViewDelegate,
UIPickerViewDataSource {
//배열 준비
var device = ["아이폰", "아이패드","윈도우폰","안드로이드"]
@IBOutlet var picker: UIPickerView!
@IBAction func didAlertOne(_ sender: Any) {
let alert = UIAlertController(title: "알림", message: "UIAlertController 데모", preferredStyle: UIAlertController.Style.alert)
//버튼 생성
let cancelAction = UIAlertAction(title: "취소", style:UIAlertAction.Style.cancel,
handler: {(_) in print("취소 버튼 클릭")})
alert.addAction(cancelAction)
//화면에 출력
self.present(alert,animated:true)
}
@IBAction func didAlertTwo(_ sender: Any) {
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
//누가 위임받았는지 지정
picker.delegate = self
picker.dataSource = self
}
func numberOfComponents(in pickerView: UIPickerView) -> Int {
//컬럼의 숫자
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return device.count
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return device[row]
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
print(device[row])
}
}
반응형