[TIL] 예외처리

Eden·2025년 1월 14일
0

TIL

목록 보기
97/129
post-thumbnail

1. 사용자 입력 관련 예외

  • 입력값 유효성 검증 실패
    • 텍스트 필드가 비어 있을 때.
    • 단어장 이름, 단어, 뜻 등 필수 입력값이 빠졌을 때.
    • 너무 긴 문자열을 입력했을 때 (제한 필요).
  • 잘못된 형식의 입력
    • 특수문자나 숫자가 포함된 단어 입력.
    • 유효하지 않은 언어 선택.

해결 방법

  • 입력값을 검증하고, 유효하지 않을 경우 알림창을 표시하거나 저장/확인 버튼 비활성화.
  • 예를 들어, 단어장이름 텍스트 필드가 비어있으면 저장 버튼을 막는다.

2. UI 관련 예외

  • 뷰 레이아웃 문제
    • SnapKit 제약 조건이 제대로 설정되지 않아서 UI가 깨질 경우.
  • 버튼이나 제스처가 비정상적으로 동작
    • UIButton에 잘못된 태그가 할당되어 의도하지 않은 언어가 선택되는 경우.
    • 제스처가 잘못 연결되거나 동일한 이벤트가 여러 번 발생하는 경우.

해결 방법

  • UIButton이나 제스처에 잘못된 데이터를 처리하지 않도록 방어 코드를 작성.
  • UI를 테스트하며 레이아웃 충돌을 방지.

3. 네트워크 또는 데이터 작업 관련 예외

  • 네트워크 요청 실패
    • 단어 번역 검색(fetchTranslation)이 실패할 때.
    • 서버 응답 지연, 인터넷 연결 끊김 등의 상황.
  • 데이터베이스 오류
    • CoreData에서 데이터를 저장하거나 가져오는 중 실패.
    • 저장 시 중복 데이터가 발생하거나 불완전한 데이터가 저장됨.

해결 방법

  • 네트워크 요청 실패 시 사용자에게 알림을 띄우고, 재시도 버튼을 제공.
  • CoreData 작업 중 오류가 발생하면 기본 오류 메시지를 출력하고 로그를 남김.

4. RxSwift 관련 예외

  • Observable 에러
    • Observable 체인에서 에러가 발생했을 때 적절히 처리하지 않음.
    • disposeBag 누락으로 메모리 누수가 발생.
  • binding 에러
    • bindsubscribe 시 nil 값으로 인한 크래시.

해결 방법

  • Rx 체인에서 .catch 또는 .catchAndReturn을 추가해 에러를 캐치.
  • disposed(by: disposeBag)를 빠뜨리지 않고 항상 추가.

5. 모달 동작 관련 예외

  • 초기화되지 않은 상태에서 모달 작동
    • 모달이 열리기 전에 뷰모델 데이터가 설정되지 않은 경우.
  • 모달 닫기 실패
    • 모달 뷰가 화면에 남아있거나 dismiss가 제대로 호출되지 않음.

해결 방법

  • 모달이 열리기 전에 필요한 데이터를 준비하고 초기화.
  • 모달 닫기 액션(dismiss)이 항상 호출되도록 방어 로직 추가.

6. 기타 논리적 예외

  • 잘못된 상태에서 액션 수행
    • 선택되지 않은 단어장 상태에서 단어 저장을 시도.
    • 이미 선택된 언어를 다시 선택할 때 중복 처리.
  • 메모리 누수
    • RxSwift를 사용하는 경우 weak self를 사용하지 않아 순환 참조가 발생.

해결 방법

  • 모든 상태를 검증하여 의도하지 않은 동작을 방지.
  • 클로저에서 weak self를 사용해 메모리 관리.

7. 예외 처리 전략

예외 상황별로 처리 방안을 통합적으로 관리하기 위해 다음을 활용할 수 있다:

  • Alert 표시
    • 문제가 발생하면 사용자에게 명확한 메시지와 함께 알림을 표시.
  • 로깅
    • 개발 중에는 print나 로깅 라이브러리(Sentry 등)를 사용해 예외를 추적.
  • 기본값 사용
    • 에러 발생 시 안정성을 위해 기본값을 제공.
  • UI 비활성화
    • 입력값이 부족하거나 잘못된 경우 버튼을 비활성화.
profile
Frontend🌐 and iOS

0개의 댓글

관련 채용 정보