Step by Step

Delegate 패턴 본문

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])
    }

}
반응형

'ios 앱 개발' 카테고리의 다른 글

Objective-C 기본 개념  (3) 2025.04.21
ViewController 간 Data 교환  (0) 2025.03.26
Swift(Segueway 화면전환)  (2) 2025.03.26
Swift 기본문법(3)  (1) 2025.03.25
Swift 기본문법(2) 옵셔널 바인딩, 초기화  (0) 2025.03.25