TableView 기본
TableView란?
- 단일 열에 배열된 행을 사용하여 데이터를 표시하는 뷰
- 화면에 목록을 표시하기 위한 UI 구성요소
Swift 4가지 기본 특징
- 프로토콜 지향 언어
- ArrayList(=Dictionary)
- DataSource
- Delegate
프로토콜 지향 언어
객체 vs 프로토콜
- 객체 지향 언어 = “is a”
- 프로토콜 지향 언어 = “have a”
protocol <프로토콜명> {
// 프로토콜 정의
}
- 프로토콜은 클래스나 구조체가 어떤 기준을 만족하거나 또는 특수한 목적을 달성하기 위해 구현해야 하는 메소드와 프로퍼티의 목록이다.
(객체지향에서의 인터페이스와 거의 비슷)
- iOS는 특정 컨트롤에서 발생하는 각종 이벤트를 효율적으로 관리하기 위해 대리자(delegate)를 지정하여 이벤트 처리를 위임하고, 실제로 이벤트가 발생하면 위임된 대리자가 콜백 메소드를 호출해주는 델리게이트 패턴(Delegate Pattern)을 많이 사용하는데, 이 패턴을 구현하기 위해 이용되는 것이 프로토콜이다.
ArrayList
- 추가, 수정, 삭제에 용이하다
- ex) Array : 발표장 & ArrayList : OIKE 한정 판매
- 순차리스트 : 배열을 기반으로 구현된 리스트
- 배열 기반 리스트의 단점
- 배열의 길이가 초기에 결정되어야 한다. 변경이 불가능!
- 삭제의 과정에서 데이터의 이동(복사)이 매우 빈번히 일어난다.
- 배열 기반 리스트의 장점
- 데이터의 참조가 쉽다. 인덱스 값을 기준으로 어디든 한번에 참조가 가능하다.
DataSource
: ViewController에게 데이터를 전달해주는 객체
- 코드를 화면에 구현시켜줌
- 데이터를 받아 뷰를 그려주는 역할 → 너는 뭘 어떻게 보여줄거냐? 그것을 해주는 것이 DataSource
Delegate
- (권한업무 등을) 위임하다
- Protocol을 통해 기능 구현 → Delegate를 통해 기능 위임 → 위임 받은 Object에서 Protocol 기능 사용
- 기능을 다른 곳에서도 사용할 수 있도록 만들어주는 객체
- 객체 지향 프로그래밍에서 하나의 특정 객체가 모든 일을 처리하는 것이 아니라 처리 해야 할 일 중 일부 작업을 다른 객체에 넘기는 것을 뜻함
- ex) View Controller에서 보자면 TableView의 특정 셀에 있는 여러 개의 버튼 중에 특정 버튼을 눌렀을 경우 해야할 일을 View Controller로 넘겨주기 위해 Delegate 패턴을 사용함
- 어떤 행동에 대한 "동작"을 제시
- DataSource는 "보여주는" 것들 담당했다면, delegate는 사용자가 그 보이는 부분 중 어떤것을 클릭하거나 어떤 행동을 했을 때, 그 행동에 대한 동작을 수행하게 됨
- 이 row를 클릭하면 뭘 할래?
Notification
- NotificationCenter를 통해 정보를 저장하기 위한 구조체
- 옵저버들에게 전달되는 구조체로 정보가 담겨있고, 해당 알림을 등록한 옵저버에게만 전달된다.
var name: Notification.Name // name : 알림을 식별하는 태그
var object: Any? // object : 발송자가 옵저버에게 보내려고 하는 객체 & 주로 발송자 객체를 전달하는 데 쓰임
userInfo: [AnyHashable : Any]? // userInfo : Notification과 관련된 값 또는 객체의 저장소
Notification Center (NSNotificationCenter)
- notification이 오면 observer pattern을 통해서 등록된 옵저버들에게 notification을 전달하기 위해 사용하는 클래스
- notification을 발송하면 NotificationCenter에서 메세지를 전달한 observer를 처리할 때까지 대기한다. 즉, 흐름이 동기적으로 흘러간다.
- Notification Center를 통해서 앱의 한 파트에서 다른 파트로 데이터를 전달할 수 있다.
- Notification이 오면 등록된 observer list를 스캔한다.
- Notification Center는 어플리케이션 어느 곳에서 어느 객체와도 상호작용을 할 수 있다.