[UIKit] UITableView에 대해

Daehyeon Yun·2025년 3월 22일

1. @IBOutlet 란?

  • 스토리보드와 코드를 연결해주는 코드 라인
    • 스토리보드에서 TableView를 하나 만든 뒤 실제 코드와 연결할 때 사용한다. → 스토리보드에서 만든 UI 컴포넌트를 코드에서 접근하기 위한 연결선 → 그래야 myTableView.backgroundColor = .green 와 같이 데이터를 변경할 수 있다.

💡비유하자면 콘센트 선을 연결하는 것과 같다. 연결을 안하면 아무리 전기를 보내도 불이 안켜지는 것과 같다.

@IBOutlet weak var myTableView: UITableView!

2. UITableViewDelegate, UITableViewDataSource 의 역할

✅ UITableViewDelegate

  • TableView에서 ‘어떻게 동작할건가?’ 를 말한다. → 즉, 셀을 눌렀을 때 무엇을 할 것인지, 높이는 어떻게 할 것인지 등을 말한다.

✅ UITableViewDataSource

  • TableView에서 ‘무엇을 넣을 건가?’ 를 담당한다. → 즉, 셀을 몇 개 만들건가? 어떤 글을 쓸 거냐? 등을 말한다.
myTableView.delegate = self
myTableView.dataSource = self

self 는 현재 MyTableViewControllerdelegatedataSource 역할을 수행한다는 의미다.

📎 2-1. delegate 란?

  • 테이블뷰의 동작, 이벤트 처리 담당 → 클릭했을 때 어떤 이벤트가 발생할까?
  • 대리자라는 뜻이며 말 그대로 어떤 객체가 해야 하는 일을 다른 객체에게 위임 하는 구조이다.

🔎 Swift / UIKit에서 어떻게 활용할까?

  • UIKit에서 이벤트(클릭, 스크롤 등)가 발생했을 때 ”이거 어떻게 처리할까?” 라고 위임받은 객체에게 묻는다.
  • 테이블뷰에서 셀이 클릭되면 delegate 메서드가 호출된다.
    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)

📎 2-2. dataSource 란?

  • 테이블뷰에 들어갈 데이터를 제공 → 몇 개의 셀을 그릴까? 각 셀에 무엇을 보여줄까?
  • 데이터 제공자라는 뜻 그대로 이 뷰에 들어갈 데이터는 이걸로 채워줘 라고 알려주는 역할이다.

🔎 Swift / UIKit에서 어떻게 활용할까?

  • 테이블뷰가 화면에 뿌릴 데이터가 필요할 때 DataSource 에게 묻는다.
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int

3. UITableViewDataSource 채택 시 필수 구현 메서드

📌 numberOfRowsInSection

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
  • 목적 : TableView의 아이템(리스트 혹은 섹션)의 개수를 표현하기 위함. → TableView가 “몇 줄 만들까요?” 라는 의미
  • 파라미터
    • tableView : 현재 데이터를 요청하는 테이블 뷰 객체
    • section : 섹션 번호 (기본은 0, 섹션이 여러 개 일때 구분하기 위한 용도)

📌 cellForRowAt

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath)
 -> UITableViewCell
  • 목적 : 테이블뷰 각 셀에 어떤 데이터를 넣을 건지 설정하기 위함.
  • 리턴값 : UITableViewCell → 화면에 보여줄 셀
  • 파라미터
    • tableView : 현재 데이터를 요청하는 테이블 뷰 객체
    • indexPath : 섹션 번호 + 줄 번호 정보 (indexPath.section, indexPath.row)

💡 포인트 : indexPath.row 를 이용해 cellData 배열에서 데이터를 꺼내오는 것!

let cell = tableView.dequeueReusbleCell(withIdentifier: "myCell", for: indexPath)
cell.textLabel?.text = cellData[indexPath.row]
return cell

dequeueReusbleCell : 재사용 가능한 셀을 가져오기. (메모리의 효율성 증가)


4. UITableViewDelegate 를 채택할 때 필수 구현은 아닌 메서드

📌 didSelectRowAt

  • 필수 구현 메서드는 아니다.
  • 특정 셀을 클릭했을 때 동작을 정의하는 메서드이다.
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)

5. TableView의 전체 구조 이해(Data Flow)

  1. viewDidLoad() 에서 delegate, dataSource 를 연결한다.
  2. 테이블뷰가 화면에 나타날 준비를 진행한다. → 이때 dataSource 호출
  3. numberOfRowsInSection() 호출 → 테이블뷰에 몇 줄을 그릴거야?
  4. cellForRowAt() → 각 줄에 뭘 그릴거야?
  5. (선택) 셀을 누르면 delegate 메서드 실행

💡 6. 핵심 용어 정리

용어설명
@IBOutlet스토리보드 ↔ 코드 연결
delegate테이블뷰 이벤트 처리자 (행동)
dataSource테이블뷰 데이터 제공자 (데이터)
indexPath.row현재 셀의 줄 번호
indexPath.section현재 셀의 섹션 번호
dequeueReusableCell재사용 셀 꺼내기 (메모리 관리)
profile
열심히 살아야지

0개의 댓글