[내일배움캠프] 260107 TIL

Bambu·2026년 1월 7일

내배캠 TIL

목록 보기
14/52

1. 프로그래밍 기초 주차 과제

필수과제 4, 5 Pull Request

1) 타입 캐스팅

is 연산자

타입을 체크하는 연산자 - 런타임 시점에 체크가 이루어짐

as 타입캐스팅

  • as : 업캐스팅
    : 서브 클래스 인스턴스를 슈퍼 클래스 타입으로 참조
    ⇒ 항상 성공! (실패할 경우 에러 발생)

  • as? as! : 다운캐스팅
    : 슈퍼 클래스 인스턴스를 서브 클래스 타입으로 참조
    ⇒ 실패 가능성이 있으므로 as?, as!와 같은 형태로 연산자 사용
    as? : 런타임 시점에 타입 캐스팅을 하며, 실패할 경우 nil 리턴
    as! : 런타임 시점에 타입 캐스팅을 하며, 실패할 경우 에러 발생

참고: Swift) is, as - 타입 캐스팅 (Type Casting) - 개발자 소들이

for element in introducibleArr {
    if element is Robot {
        let instance = element as? Robot
        instance?.batteryCharge()
    } else if element is Cat {
        let instance = element as? Cat
        instance?.meow()
    } else if element is Dog {
        let instance = element as? Dog
        instance?.bark()
    } else {
        continue
    }
}

is 연산자로 타입 체크 후 다운캐스팅하여 고유 메서드를 실행

2) 오류 처리하기

  • 오류 타입 정의
enum DeliveryError: Error {
	case invalidAddress
    case notstarted
    case systemError(reason: String)
}
  • 오류를 던지는 함수 구현
func predictDeliveryDay(for address: String, status: DeliveryStatus) throws -> String {
	// 주소가 잘못된 경우
    if address.isEmpty {
        throw DeliveryError.invalidAddress
    }

    // DeliveryStatus에 따른 분기 처리
    switch status {
    case .notStarted: // 배송이 아직 시작되지 않은 경우
    	throw DeliveryError.notstarted

	case .error: // 시스템 서버 에러로 예측이 불가능한 경우
    	throw DeliveryError.systemError(reason: "서버 에러")

    case .inTransit(dayRemaining: let day): // 정상 배송 상태
    	return "배송까지 \(day)일 남았습니다."
    }
    
}

→ 매개변수로 받는 status: DeliveryStatus 열거형 타입 변수 처리 시 패턴 매칭 사용!
case .inTransit(dayRemaining: let day):

  • 함수 호출 시 오류 처리
do {
	// 오류 던지는 함수 호출 (try 와 함께!)
	try print(predictDeliveryDay(for: "우리집", status: notStarted))
} catch DeliveryError.notstarted { // 던진 에러 타입에 따라 catch 블록에서 처리
	print("아직 배송이 시작되지 않았습니다.")
} catch DeliveryError.invalidAddress {
	print("유효하지 않은 주소입니다.")
} catch DeliveryError.systemError(reason: let reason) { // 열거형(에러타입) 패턴 매칭
	print("시스템 에러입니다. 사유: \(reason)")
} catch {
	print("그 외 오류 발생: \(error)")
}

do 블록 내에서 함수 호출
: try - 오류 타입에 따라, 혹은 암시적으로 들어오는 에러가 있을 때 catch 블록 내에서 처리
: try? - 오류 발생 시 반환값을 옵셔널 값으로 변환하여 처리
: try! - 오류를 던질 수 있는 함수가 오류가 절대 발생하지 않을 것을 확신할 때 사용(오류 발생 시 런타임 에러 발생)

➡︎ 열거형 패턴매칭과 오류 처리에 익숙해지자!

참고: [Swift] 기초 문법 - 예외처리(throws, do-catch, try) - potatos' devlog

2. 코딩테스트 연습

프로그래머스 Lv.1 달리기 경주
→ 연산 시간 신경쓰면서 구현하기
→ 다양한 시각으로 생각하는 연습하기...

프로그래머스 Lv.1 추억 점수
reduce 메소드 사용 방법 숙지하기 - 맨날 까먹음

compactMap : 옵셔널 값을 언래핑하여 기존 배열 형태로 반환 (nil값은 제외함)
flatMap : (옵셔널 값을 언래핑하여) 1차원 배열 형태로 반환
(nil값 제외됨. 단, 옵셔널 언래핑 기능은 compactMap으로 이관되었으므로 해당 용도로는 compactMap 사용)

profile
안녕하세요, iOS 개발을 공부하고 있는 Bambu입니다. (프로필: Swifticons)

0개의 댓글