타입캐스팅,델리게이트

jeongmuyamette·2025년 2월 12일

TIL

목록 보기
43/72
post-thumbnail

1. 타입캐스팅 (Type Casting)

타입캐스팅은 인스턴스의 타입을 확인하거나 해당 인스턴스를 슈퍼클래스나 서브클래스로 취급하는 방법입니다.

1.1. 타입캐스팅 연산자

  1. as? (조건부 다운캐스팅)
// 예시
if let cell = collectionView.dequeueReusableCell(...) as? FrameWorkCell {
    // cell이 FrameWorkCell 타입인 경우에만 실행
}
  • 실패할 수 있는 경우 사용
  • 실패하면 nil 반환
  • Optional 타입으로 반환
  1. as! (강제 다운캐스팅)
let cell = collectionView.dequeueReusableCell(...) as! FrameWorkCell
  • 확실히 성공할 것이라고 확신할 때 사용
  • 실패하면 크래시 발생
  • 가급적 사용 지양
  1. as (업캐스팅)
let view: UIView = UIButton() as UIView
  • 상위 클래스로 타입 변환
  • 항상 성공

1.2. 실제 예시

// 일반적인 UICollectionViewCell을 FrameWorkCell로 타입캐스팅
guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "FrameWorkCell", 
    for: indexPath) as? FrameWorkCell else {
    return UICollectionViewCell()
}

2. 델리게이트 (Delegate)

델리게이트는 "위임"이라는 의미로, 특정 객체가 해야 하는 일을 다른 객체에게 위임하는 디자인 패턴입니다.

2.1. 델리게이트의 특징

  1. 책임 분리

    • 객체 간의 결합도를 낮춤
    • 코드 재사용성 증가
  2. 프로토콜 기반

    • 델리게이트는 프로토콜로 정의
    • 필요한 메서드들을 명시

2.2. 실제 예시

// 1. 델리게이트 설정
class FrameWorkListViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        collectionView.delegate = self    // 자신을 델리게이트로 지정
        collectionView.dataSource = self  // 자신을 데이터소스로 지정
    }
}

// 2. 델리게이트 메서드 구현
extension FrameWorkListViewController: UICollectionViewDelegate {
    // 셀이 선택되었을 때 호출되는 메서드
    func collectionView(_ collectionView: UICollectionView, 
                       didSelectItemAt indexPath: IndexPath) {
        // 셀 선택 시 동작 구현
    }
}

2.3. 델리게이트 패턴의 실생활 비유

식당에서의 주문 과정을 예로 들어보겠습니다:

// 실제 코드가 아닌 개념 설명을 위한 예시
protocol 웨이터Delegate {
    func 주문받기()
    func 음식가져다주기()
}

class 손님 {
    var 웨이터: 웨이터Delegate?
    
    func 배고프다() {
        웨이터?.주문받기()  // 웨이터에게 주문 위임
    }
}

class 웨이터: 웨이터Delegate {
    func 주문받기() {
        // 주문 받는 로직
    }
    
    func 음식가져다주기() {
        // 음식 서빙 로직
    }
}

2.4. UICollectionView에서의 주요 델리게이트

  1. UICollectionViewDelegate

    • 사용자 상호작용 처리
    • 셀 선택, 하이라이팅 등
  2. UICollectionViewDataSource

    • 데이터 관련 처리
    • 셀 개수, 셀 내용 등
  3. UICollectionViewDelegateFlowLayout

    • 레이아웃 관련 처리
    • 셀 크기, 간격 등
// 예시
extension FrameWorkListViewController: UICollectionViewDataSource {
    // 몇 개의 셀을 보여줄지
    func collectionView(_ collectionView: UICollectionView, 
                       numberOfItemsInSection section: Int) -> Int {
        return list.count
    }
    
    // 각 셀을 어떻게 구성할지
    func collectionView(_ collectionView: UICollectionView, 
                       cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        // 셀 구성 로직
    }
}

이러한 델리게이트 패턴은 코드를 더 모듈화하고 유지보수하기 쉽게 만들어줍니다.

0개의 댓글