본문 바로가기
Flutter/Dart

dart 예외 처리 - 1

by 남행비 2023. 9. 21.

학습 목표

1. 예외 처리란 뭘까?

2. 컴파일 에러(Compile-time Error) 와 예외(Exception) 구분 하기

3. dart는 컴파일 언어일까? 인터프리터 언어일까?

 

 

1. 예외 처리란 뭘까?

예외 처리(Exception Handling)란, 프로그램이 실행 중에 예상치 못한 상황 또는 오류가 발생했을 때 이를 적절하게 처리하는 기술입니다. 예외 처리는 프로그램의 안정성을 높이고 비정상적인 상황에 대처할 수 있는 방법을 제공합니다.

 

일반적으로 Dart에서 예외는 프로그램 실행 중에 발생한 오류를 나타내며, 이를 처리하는 데에는 try, catch, finally 구문을 사용합니다.

 

try: 예외 발생 가능한 코드 블록을 감싸는 부분입니다.

catch: 예외가 발생했을 때 처리하는 코드 블록으로, 발생한 예외를 잡아서 처리합니다.

finally: 예외 발생 여부와 관계 없이 반드시 실행되어야 하는 코드 블록입니다.

 

dart의 예외 클래스 구조

Object
  ├── Error
  │     ├── ArgumentError
  │     ├── AssertionError
  │     ├── CastError
  │     └── ...
  └── Exception
        ├── FormatException
        ├── IOException
        ├── TimeoutException
        └── ...

-- 사용자 정의 예외 클래스

 

2. 컴파일 에러(Compile-time Error) 와 예외(Exception) 구분 하기

에러 Error

에러는 시스템 수준에서 발생하며, 대체로 프로그램이나 애플리케이션에서 복구가 불가능한 상황을 나타냅니다.

예를 들어, JVM(Java Virtual Machine)에서 발생하는 OutOfMemoryError와 같은 에러는 프로그램에서 직접 처리하기 어렵습니다.

이러한 에러는 개발자가 예상하거나 대응하기 어려운 시스템 수준의 문제로 인해 발생합니다.

 

컴파일 에러(Compile-time Error)

컴파일 단계에서 발생하며, 프로그램의 구조나 문법적인 오류로 인해 발생합니다. 이러한 에러는 개발자가 코드를 수정하여 해결해야 합니다. 주로 문법 오류, 타입 불일치 등과 관련이 있습니다. 에러가 발생하면 프로그램이 컴파일 자체가 되지 않거나 실행되지 않습니다.

 

예외(Exception)

예외(Exception)는 프로그램 실행 중에 발생하는 문제로, 논리적인 오류나 런타임 환경의 상황에 따라 발생할 수 있습니다. 예를 들어 파일을 열려고 할 때 파일이 존재하지 않거나, 0으로 나누려고 할 때 등이 해당됩니다. 예외는 예외 처리를 통해 프로그램이 비정상적으로 종료되는 것을 방지하고, 실행 중에 문제를 처리하도록 도와줍니다.

 

3. dart는 컴파일 언어(o)일까? 인터프리터 언어일까(x)?

DartJIT (Just-In-Time) 컴파일 언어와 AOT (Ahead-Of-Time) 컴파일 언어의 양쪽을 모두 지원하는 다양한 특성을 가지고 있는 언어입니다.

 

1. JIT (Just-In-Time) 컴파일:

Dart는 기본적으로 JIT 컴파일 방식을 사용합니다. JIT 컴파일 방식은 코드를 실행하기 전에 런타임에 코드를 기계어로 변환하는 방식입니다. Dart 코드는 VM (Virtual Machine) 위에서 실행되며, 코드를 실행하면 런타임에 필요한 최적화와 컴파일이 수행됩니다. 이로 인해 빠른 개발 및 편리한 디버깅이 가능하며, 코드 수정 후 즉시 실행할 수 있는 장점이 있습니다.

 

2. AOT (Ahead-Of-Time) 컴파일:

Dart는 AOT 컴파일도 지원합니다. AOT 컴파일은 코드를 실행하기 전에 미리 기계어로 변환하여 실행 파일을 생성하는 방식입니다. AOT 컴파일을 사용하면 더 빠른 실행 속도와 최적화된 성능을 얻을 수 있습니다. 특히 모바일 앱 개발에서는 Flutter 프레임워크를 통해 Dart 코드를 AOT 컴파일하여 네이티브 바이너리 파일을 생성하는 것이 일반적입니다.

 

즉, Dart 코드는 실행 시점에 런타임에서 컴파일 되며, 코드를 기계어로 변환하여 실행됩니다.

따라서 Dart는 컴파일 언어입니다.

 

네이티브 바이너리 파일이란?

AOT 컴파일이라는 개념은 코드를 사전에 컴파일하여 네이티브 머신 코드로 변환하는 것을 의미합니다. 이 때, 생성되는 네이티브 바이너리 파일의 여부 및 확장자는 플랫폼과 사용되는 도구에 따라 다를 수 있습니다.

 

Dart 코드를 AOT 컴파일하여 네이티브 바이너리 파일을 생성하는 경우, 생성되는 파일은 주로 실행 가능한 응용 프로그램이 됩니다. 예를 들어 Android 앱의 경우 .apk 파일이 생성될 수 있고, iOS 앱의 경우 .ipa 파일이 생성될 수 있습니다. 이러한 앱 패키지 파일 안에는 Dart 코드 뿐만 아니라 플랫폼에 맞는 실행 파일과 라이브러리 등이 포함됩니다.

 

또한, Dart의 AOT 컴파일 방식 중 하나인 "Flutter"의 경우 네이티브 바이너리 파일이 생성되며, 파일의 확장자는 일반적으로 .so (Shared Object) 파일이거나 .dll (Dynamic Link Library) 파일 등이 될 수 있습니다.

 

요약하면, AOT 컴파일을 통해 Dart 코드를 네이티브 바이너리로 변환하는 경우, 생성되는 파일의 확장자는 플랫폼과 사용되는 도구에 따라 다양할 수 있으며, 일반적으로 실행 가능한 앱 패키지 파일이나 네이티브 라이브러리 파일이 될 수 있습니다

 

 

'Flutter > Dart' 카테고리의 다른 글

dart 예외 처리 - 2  (0) 2023.09.21
dart 비동기 프로그래밍 -3  (0) 2023.09.20
dart 비동기 프로그래밍 -2  (0) 2023.09.19
dart 비동기 프로그래밍 -1  (0) 2023.09.19
dart null Safety  (0) 2023.09.19