카테고리 없음

iOS 프로그래밍실무 5주차

sw0913 2025. 4. 2. 16:49

Delegate
정의: Delegate는 객체 간의 통신을 위한 디자인 패턴입니다. 한 객체가 다른 객체에게 특정 작업을 위임할 때 사용됩니다.

용도: 주로 이벤트 처리 및 콜백 메커니즘에 사용됩니다. 예를 들어, 버튼 클릭 이벤트를 처리하기 위해 Delegate를 설정하여 특정 메서드를 호출하도록 할 수 있습니다.

장점: 코드의 재사용성을 높이고, 모듈화된 구조를 만들 수 있습니다. 객체 간의 결합도를 낮춰 유지보수가 용이하게 합니다.

DataSource
정의: DataSource는 데이터를 제공하는 객체 또는 인터페이스를 의미합니다. 데이터베이스, 파일, 웹 서비스 등 다양한 형태의 데이터 소스가 될 수 있습니다.

용도: UI 구성 요소가 데이터를 표시할 때 사용됩니다. 예를 들어, 테이블 뷰에서 보여줄 데이터를 제공하는 역할을 합니다.

장점: 데이터와 UI를 분리함으로써, 데이터의 변경이 UI에 쉽게 반영될 수 있도록 합니다. 다양한 데이터 소스를 유연하게 사용할 수 있는 구조를 제공합니다.

프로토콜과 상속

프로토콜

  • 정의: 프로토콜은 특정 메서드와 속성을 정의하는 일종의 계약입니다. 클래스, 구조체, 열거형 등이 이 프로토콜을 채택하여 요구되는 메서드와 속성을 구현해야 합니다.
  • 용도: 프로토콜은 다형성을 제공하며, 다양한 클래스나 구조체가 동일한 인터페이스를 따르게 할 수 있습니다. 이를 통해 코드의 일관성을 유지하고, 객체 간의 상호작용을 정의할 수 있습니다.
  • 장점:
    • 코드의 재사용성을 높입니다.
    • 서로 다른 클래스 간의 공통된 동작을 정의할 수 있습니다.
    • 여러 프로토콜을 동시에 채택할 수 있습니다(다중 프로토콜 채택).

상속

  • 정의: 상속은 한 클래스가 다른 클래스의 속성과 메서드를 물려받는 개념입니다. 부모 클래스(기본 클래스)의 기능을 자식 클래스(파생 클래스)에서 재사용하고 확장할 수 있습니다.
  • 용도: 코드의 중복을 줄이고, 공통된 기능을 가진 클래스의 집합을 만들 수 있습니다. 상속을 통해 클래스 구조를 계층적으로 설계할 수 있습니다.
  • 장점:
    • 코드의 재사용성을 높입니다.
    • 유지보수가 용이해집니다. 기본 클래스의 변경 사항이 모든 파생 클래스에 반영됩니다.
    • 다형성을 통해 동일한 인터페이스를 사용하여 서로 다른 클래스의 객체를 처리할 수 있습니다.

차이점

  • 프로토콜은 특정 기능을 요구하는 반면, 상속은 클래스 간의 관계를 정의합니다.
  • 프로토콜은 여러 클래스에 걸쳐 공통된 동작을 정의할 수 있지만, 상속은 특정 클래스 계층 구조 내에서만 적용됩니다.

UITableViewDataSource프로토콜을 사용할 때에는 필수 메서드가 두가지가 있고 나머지는 선택 프로토콜이 있어요

UITableViewDataSource 프로토콜

UITableViewDataSource 프로토콜은 UITableView의 데이터 제공을 위한 메서드를 정의합니다. 이 프로토콜에는 필수 메서드와 선택 메서드가 있습니다.

필수 메서드

  1. numberOfSections(in:)
    • 설명: 테이블 뷰의 섹션 수를 반환합니다.
    • 시그니처:
    • func numberOfSections(in tableView: UITableView) -> Int
  2. tableView(_:numberOfRowsInSection:)
    • 설명: 특정 섹션의 행 수를 반환합니다.
    • 시그니처:
    • func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
  3. tableView(_:cellForRowAt:)
    • 설명: 특정 행에 대한 셀을 반환합니다. 이 메서드는 테이블 뷰의 각 셀을 구성하는 데 사용됩니다.
    • 시그니처:
    • func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell

선택 메서드

  1. tableView(_:titleForHeaderInSection:)
    • 설명: 특정 섹션의 헤더 제목을 반환합니다.
    • 시그니처:
    • func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String?
  2. tableView(_:titleForFooterInSection:)
    • 설명: 특정 섹션의 푸터 제목을 반환합니다.
    • 시그니처:
    • func tableView(_ tableView: UITableView, titleForFooterInSection section: Int) -> String?
  3. tableView(_:canEditRowAt:)
    • 설명: 특정 행이 편집 가능 여부를 반환합니다.
    • 시그니처:
    • func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool
  4. tableView(_:commit:forRowAt:)
    • 설명: 사용자가 행을 편집할 때 호출되며, 편집 작업을 수행합니다.
    • 시그니처:
    • func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath)
  5. tableView(_:didSelectRowAt:)
    • 설명: 사용자가 특정 행을 선택했을 때 호출됩니다.
    • 시그니처:
    • func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)

결론

UITableViewDataSource 프로토콜은 UITableView의 데이터 관리 및 표시를 위한 핵심 메서드를 제공합니다. 필수 메서드는 반드시 구현해야 하며, 선택 메서드는 필요에 따라 구현할 수 있습니다.

UITableViewDelegate 프로토콜

UITableViewDelegate 프로토콜은 UITableView의 동작과 관련된 메서드를 정의합니다. 이 프로토콜을 사용하여 사용자의 인터랙션에 대한 응답을 처리하고, 테이블 뷰의 외관을 조정할 수 있습니다.

 

Table View Controller를 쓰면 Table View와 Table View Cell 을 간편하게 사용할 수 있습니다

화면을 가득 채우고 싶다면 모든 부분을 0으로 지정해주고 Constrain to margins 체크를 풀어줍니다

왼쪽을 leading 오른쪽을 trailing이라고 해요 생소하지만 위아래는 top bottom이라서 외우기 쉬워요

 

 

 

cell.textLabel?.text = indexPath.description

description을 사용하면

몇 번째 섹션인지 알아 볼 수 있습니다.

 

 

subtitle과 imageView를 이용해 이렇게 나타내줄 수 있어요

return형을 잘 봐야합니다. 

 

 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        print(indexPath.description)
    }

셀을 눌렀을때 출력되게 해주는 함수에요

 

 

출처 - Smile Han