Programming Languages/Swift

Protocols / Extensions/ Error Handling

꼰대코더 2025. 12. 26. 23:44

1️⃣ Protocol (프로토콜)

역할

  • 타입이 반드시 가져야 할 속성과 메서드의 “약속”
  • Class / Struct / Enum 모두 채택 가능
protocol CalorieCountable {
       var calories: Int { get }
       func description() -> String
}

핵심 포인트

  • 구현 ❌, 요구사항만 정의
  • { get } → 읽기 전용
  • { get set } → 읽기/쓰기

2️⃣ Protocol 채택 (Conformance)

Class / Struct에서 직접 채택

class Burger: CalorieCountable { ... }
struct Fries: CalorieCountable { ... }
  • 요구된 모든 프로퍼티/메서드 구현 필수
  • var 요구 → let 구현 가능 (get-only)

3️⃣ Extension (확장)

목적

  • 기존 타입 수정 없이 기능 추가
  • 프로토콜 채택 가능

class ExistingType {

    property1

    method1()

}

 

extension ExistingType : ProtocolName {

    property2

    method2()

}

특징

  • Apple 제공 타입도 확장 가능
  • 코드 분리로 가독성 ↑

4️⃣ Enum + Protocol

  • Enum은 저장 프로퍼티 ❌
  • 계산 프로퍼티 + switch 사용
 
var calories: Int {
      switch self { ... }
}

5️⃣ Protocol 타입 배열 (다형성)

 
let foodArray: [CalorieCountable] = [burger, fries, sauce]

의미

  • 서로 다른 타입을 하나로 묶음
  • 공통 인터페이스 기반 처리

6️⃣ reduce 사용 예

 
let total = foodArray.reduce(0) { $0 + $1.calories }
  • 배열 → 단일 값 계산

7️⃣ Error Handling (에러 처리)

Error 타입

 
enum WebsiteError: Error { ... }
  • 보통 Enum 사용

throw / throws

 
func f() throws { throw ErrorType }
  • 오류 발생 시 실행 중단

do – try – catch

 
do {
       try f()
} catch {
       print(error)
}
  • 프로그램 크래시 방지
  • 에러 대응 로직 작성

'Programming Languages > Swift' 카테고리의 다른 글

Concurrency  (0) 2025.12.26
Class / Struct  (0) 2025.12.26
Functions (함수) / Closures  (0) 2025.12.26
Swift / C++ Collection Types 비교  (0) 2025.12.26
Swift vs C/C++ 문법 비교  (0) 2025.12.19