본문 바로가기

카테고리 없음

[Flutter_개발] 예외처리, enum

예외처리 (Exception Handling)

  • 예외란?
    프로그램 실행 중 예상치 못한 문제 상황을 의미한다. 예를 들어 문자열 "가"를 숫자로 변환하려 하면 null 값이 생기고, 이를 강제로 사용하면 런타임 에러가 발생하여 프로그램이 종료될 수 있다. 또한 존재하지 않는 파일을 열거나, 인터넷 연결이 끊어진 상태에서 네트워크 요청을 보내는 경우도 예외에 해당한다.
  • try-catch 문법
    • try 블록에는 오류가 발생할 수 있는 코드를 작성한다.
    • catch(e) 블록은 예외가 발생했을 때 실행되며, e 객체에 구체적인 에러 정보가 담긴다.
    • 이 구조를 통해 프로그램이 강제 종료되지 않고 정상적으로 흐름을 이어갈 수 있다.
    try {
      int? value = int.tryParse("가");
      print(value!); // 런타임 에러 발생
    } catch (e) {
      print("예외 발생: $e");
    }
  • finally 블록
    예외가 발생하든 하지 않든 항상 실행되는 블록이다. 파일을 닫거나, 네트워크 연결을 해제하거나, 프로그램 마무리 로그를 출력할 때 활용할 수 있다.
    예외 처리를 하면서도 리소스 정리를 안전하게 할 수 있다는 점이 장점이다.

 열거형 상수 (enum)

  • enum이란?
    이름이 있는 상수들의 집합으로, 특정 값들만 선택 가능하도록 제한하는 자료형이다.
    요일, 상태 값, 신호등 색깔 등 "정해진 범위 안의 선택지"가 필요한 상황에서 사용하면 좋다.
  • 문자열 비교의 문제점
    일반적으로 요일을 문자열로 받아서 조건문으로 처리하면 "수요알" 같은 오타 때문에 원하는 코드가 실행되지 않는다. 즉, 문자열 기반 조건은 실수에 취약하다.
  • enum 활용
    enum을 사용하면 미리 정의된 값만 입력할 수 있으므로 코드의 안정성과 가독성이 좋아진다.
enum Weekday { monday, tuesday, wednesday, thursday, friday, saturday, sunday }

void printTodo(Weekday day) {
  if (day == Weekday.monday) {
    print('🧹 청소하기');
  } else if (day == Weekday.tuesday) {
    print('🛍️ 장보기');
  } else if (day == Weekday.wednesday) {
    print('🧼 빨래하기');
  } else if (day == Weekday.thursday) {
    print('🧾 장부 정리');
  } else if (day == Weekday.friday) {
    print('🧠 공부 마무리');
  } else if (day == Weekday.saturday) {
    print('🍕 친구 만나기');
  } else if (day == Weekday.sunday) {
    print('😴 푹 쉬기!');
  }
}

void main() {
  printTodo(Weekday.monday);   // 출력: 청소하기
  printTodo(Weekday.wednesday); // 출력: 빨래하기
  // printTodo(Weekday.www); // enum 에 포함안된 값 입력 시 에러!
}

 

 

 예외처리를 통해 프로그램이 강제 종료되지 않고, 문제 상황을 안전하게 제어할 수 있다는 점을 배웠다. 특히 finally 블록을 이용하면 예외 발생 여부와 상관없이 리소스를 정리할 수 있어 안정적인 코드를 작성할 수 있다.

enum은 정해진 값들만 다루는 상황에서 매우 유용하며, 단순 문자열 조건문보다 훨씬 안정적이고 오류 가능성이 낮다. 앞으로 프로젝트에서 요일, 상태, 모드 전환 등 한정된 선택지를 다룰 때 적극 활용해야겠다.