← Lab1.
2.
✅
✅
📎 2-1.
📎 2-2.
3.
📌
📌
4.
📌
[UIKit] UITableView에 대해
스터디2025.03.22
- UIKit
- Swift

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 는 현재 MyTableViewController 가 delegate 와 dataSource 역할을 수행한다는 의미다.
📎 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)
viewDidLoad()에서delegate,dataSource를 연결한다.- 테이블뷰가 화면에 나타날 준비를 진행한다. → 이때
dataSource호출 numberOfRowsInSection()호출 → 테이블뷰에 몇 줄을 그릴거야?cellForRowAt()→ 각 줄에 뭘 그릴거야?- (선택) 셀을 누르면
delegate메서드 실행
💡 6. 핵심 용어 정리
| 용어 | 설명 |
|---|---|
| @IBOutlet | 스토리보드 ↔ 코드 연결 |
| delegate | 테이블뷰 이벤트 처리자 (행동) |
| dataSource | 테이블뷰 데이터 제공자 (데이터) |
| indexPath.row | 현재 셀의 줄 번호 |
| indexPath.section | 현재 셀의 섹션 번호 |
| dequeueReusableCell | 재사용 셀 꺼내기 (메모리 관리) |