👨‍🎓
Today I Learned
  • Today-I-Learend
  • 🍎WWDC
    • Developer Tools
      • Testing in Xcode
    • UIKit
      • UIDiffableDataSource
        • [WWDC 19] Advances in UI Data Sources
      • [WWDC2019] Advances in CollectionView Layout
  • 자료구조
    • Heap 자료구조
  • Clean code
    • 네이밍
    • 주석과 포맷팅
    • 함수
    • 클래스
    • 에러 핸들링
    • 가독성 높이기
    • 객체지향
  • Network
    • RestAPI
  • Swift
    • DateType
    • ARC
    • Availablity
    • KeyPath
    • Network
    • Never타입
    • Result
    • Selector
    • 검증함수
    • 메타타입
    • 동시성 프로그래밍
    • 메모리 안전
    • 에러처리
    • 접근제어 (Access Control)
    • 제네릭
    • 주요 프로토콜
  • 알고리즘
    • 그래프
    • 기초 알고리즘
    • 누적합(Prefix)
    • 복잡도
    • 비트마스킹
  • 운영체제
    • 운영체제의 개요
    • 프로세스와 스레드
    • CPU 스케줄링
    • 프로세스 동기화
    • 교착상태
    • 07. 메모리
    • 08.가상 메모리
    • 입출력 장치
    • 파일 시스템
  • UIKit
    • UITableView xib으로 만들어보기
  • 🖊️정보 기록
    • 코코아팟 배포하는 방법
  • iOS Project
    • 채팅 앱 만들기
      • Trouble shooting
      • 1. 디자인
      • 2. AutoLayout
    • 날씨 조회 어플리케이션
      • Figma를 이용한 UI 설계
      • TableView 연결하기
      • Networking
    • MVC -> MVVM으로 구조 변경해보기
      • MVC
      • MVVM
    • OAuth Project
      • 로컬 호스트를 이용한 로그인 페이지 제작
      • Github의 OAuth App 설정
    • Rest API 프로젝트
      • UI설계 (with Figma)
      • Network Model
      • MVVM 구조 전환
  • 🕶️UIKit
    • Compositional Layout
Powered by GitBook
On this page
  • 오류 코드보다는 예외 사용하기
  • 예외 클래스 잘 정의하기
  • 에러 핸들링 잘하기
  1. Clean code

에러 핸들링

오류 코드보다는 예외 사용하기

  • 오류코드

    • 상단에 오류인지 확인하는 불필요한 로직이 들어간다.

    • 오류 범주에 들어가지 않는 상태를 나타낸다면 예외로 명시적 에러 처리를 표현해주는 것이 좋다.

  • 예외처리

    • 로직부분, 예외 처리 코드가 나뉘어져 코드가 복잡하지 않ㄴ다.

// as-is
class DeviceController {
    func sendShutDown() -> Void {
        if handle != DevcieHandle.INVALID {                 // 불필요한 로직 존재
            if record.getStatus() != DEVICE_SUSPENDED {
                pauseDevice(handle)
                clearDeviceWorkQueue(handle)
                closeDevice(handle)
            } else {
                Log.error("Device suspended. Unable to shut down")
            }
        } else {
            Log.error("Invalid handle")
        }
    }
}
// to-be
class DeviceController {
    func sendShutDown() -> Void {
        do {
            try shutDown()    
        } catch {
            Log.error(error)
        }
    }
    
    private func shutDown() throws {
        let handle = getHandle(DEV1)
        let record = retrieveDeviceRecord(handle)
        
        do {
            try pauseDevice(handle)
            try clearDeviceWorkQueue(handle)
            try closeDevice(handle)       
        } catch {
            ...
            throw ...
        }
        
    }
    
    private getHandle(id: DeviceId) -> DeviceHandle {
        ...
        throw DeviceShutDownError.error1
        ...
    }
    
    ...
}

예외 클래스 잘 정의하기

  • built in exception을 잘 활용해보자

  • 상황에 맞게 custom exception을 만들어서 사용하자

에러 핸들링 잘하기

  • 에러 포착 시, 에러를 핸들링을 해줘야한다.

    • 에러가 발생해도 앱이 강제 종료되지 않도록 잘 핸들링해야한다.

    • 단순히 로그만 찍거나, 에러를 그냥 넘겨버리는 경우 위험할 수 있다.

  • 에러 핸들링을 모아서 관리할 수 있다면, 한 파일에서 관리한다.

    • 보통 같은 수준의 로직을 처리한다면, 한 곳에 모아서 처리하는 것이 에러를 포착하는데 도움을 준다

Previous클래스Next가독성 높이기

Last updated 2 years ago