UITableView 동적 데이터 처리: 실시간 업데이트 구현

작성일 :

UITableView 동적 데이터 처리: 실시간 업데이트 구현

UITableView는 iOS 애플리케이션에서 데이터를 테이블 형식으로 표시할 때 사용되는 강력한 UI 컴포넌트입니다. 이 글에서는 Swift를 사용하여 UITableView를 설정하고 데이터를 동적으로 업데이트하는 방법을 다룹니다. 단계별로 설명하므로 초보자도 쉽게 따라할 수 있으며, 실시간 데이터 업데이트 기술도 포함합니다.

UITableView 기본 설정

UITableView의 기본 설정은 꽤 간단합니다. 가장 먼저, UITableViewDelegateUITableViewDataSource 프로토콜을 준수하도록 설정해야 합니다. 이 프로토콜들은 테이블의 구조와 데이터를 관리하는 데 필요한 메서드들을 정의합니다.

swift
import UIKit

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    var tableView: UITableView!
    var data: [String] = []

    override func viewDidLoad() {
        super.viewDidLoad()
        tableView = UITableView(frame: self.view.bounds)
        tableView.delegate = self
        tableView.dataSource = self
        tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
        self.view.addSubview(tableView)
    }

    // UITableViewDataSource 메서드
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return data.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
        cell.textLabel?.text = data[indexPath.row]
        return cell
    }
}
``

위 코드에서는 기본 테이블 뷰를 설정하고, data 배열을 numberOfRowsInSectioncellForRowAt 메서드를 통해 관리합니다.

테이블 뷰에 데이터 추가하기

기본적인 설정이 끝났다면 이제 데이터를 추가해 보겠습니다. 데이터를 동적으로 추가하고 이를 테이블 뷰에 반영하는 방법에 대해 설명합니다.

swift
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    var tableView: UITableView!
    var data: [String] = []

    override func viewDidLoad() {
        super.viewDidLoad()
        tableView = UITableView(frame: self.view.bounds)
        tableView.delegate = self
        tableView.dataSource = self
        tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
        self.view.addSubview(tableView)

        // 데이터 추가 버튼
        let addButton = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(addData))
        self.navigationItem.rightBarButtonItem = addButton
    }

    @objc func addData() {
        // 데이터 추가
        data.append("새로운 데이터")
        // 테이블 뷰 업데이트
        tableView.insertRows(at: [IndexPath(row: data.count - 1, section: 0)], with: .automatic)
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return data.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
        cell.textLabel?.text = data[indexPath.row]
        return cell
    }
}
``

위 예제에서는 네비게이션 바에 추가 버튼을 생성하고, 해당 버튼을 클릭하면 data 배열에 새로운 데이터를 추가한 후 이를 테이블 뷰에 반영합니다. tableView.insertRows(at:with:) 메서드를 사용하여 업데이트를 애니메이션과 함께 반영할 수 있습니다.

실시간 데이터 업데이트

실시간 데이터 업데이트는 주로 네트워크 요청 또는 외부 이벤트 기반으로 이루어집니다. 예를 들어, 웹소켓(WebSocket) 또는 다른 서버 기반 이벤트 스트리밍을 통해 데이터를 실시간으로 받아오는 상황을 가정해 보겠습니다. 여기에서는 단순히 타이머를 사용하여 주기적으로 데이터를 업데이트하는 방법을 설명합니다.

swift
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    var tableView: UITableView!
    var data: [String] = []
    var timer: Timer?

    override func viewDidLoad() {
        super.viewDidLoad()
        tableView = UITableView(frame: self.view.bounds)
        tableView.delegate = self
        tableView.dataSource = self
        tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
        self.view.addSubview(tableView)
        startTimer()
    }

    func startTimer() {
        timer = Timer.scheduledTimer(timeInterval: 5.0, target: self, selector: #selector(fetchData), userInfo: nil, repeats: true)
    }

    @objc func fetchData() {
        // 실시간 데이터 수신 (여기서는 샘플 메소드를 사용)
        let newData = "데이터 업데이트 시간: \(Date())"
        data.append(newData)
        tableView.reloadData()
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return data.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
        cell.textLabel?.text = data[indexPath.row]
        return cell
    }
}
``

위 코드에서는 5초마다 fetchData 메서드가 호출되고, 새로운 데이터를 받아 data 배열에 추가한 후 테이블 뷰를 리로드합니다. 이를 통해 실시간 데이터 업데이트 기능을 구현할 수 있습니다.

결론

Swift에서 UITableView를 사용하여 동적 데이터 처리를 구현하는 방법에 대해 알아보았습니다. 기본 설정부터 실시간 데이터 업데이트까지 단계별로 다루었으며, 이 지침을 따라하면 보다 유연하고 동적인 사용자 인터페이스를 구축할 수 있을 것입니다. iOS 애플리케이션 개발에서 중요한 부분을 차지하는 UITableView를 효과적으로 활용하여 사용자 경험을 향상시키세요.