컴파일(Compile)
사람이 이해하는 언어를 컴퓨터가 이해하는 언어로 변환하는 과정 중 하나!
고급언어 (Dart, Python, Java 등) 를 저급언어 (2진수로 이루어진 기계어. 1,0)로 변환하는 과정이 컴파일이다
빌드 vs 컴파일
- 빌드라는 변환 과정의 큰 틀안에서 동작하는 하나의 과정이 컴파일이다.
- 여러 과정이 합쳐진것이 빌드이다.
- 빌드 과정을 도와주는 도구가 Build Tool이다. (Dart의 run)
- run을 실행하여 결과를 화면에서 볼 수 있는데 이때 Build Tool에 의해 모든 빌드과정이 자동으로 실행된다.
컴파일 타임과 런타임
- 컴파일 타임: 컴파일을 진행하는 일련의 과정
- 런타임: 컴파일 과정을 마친 프로그램이 실행되고 있는 환경 또는 동작되는 동안의 시간
컴파일 에러
- 프로그램이 실행되기 전 발견되는 에러이다.
- 컴파일링되는 과정에서 발생하는 에러로 문제를 일으킨 소스코드라인을 지적해준다.
타입 불일치 에러
선언되지 않은 변수 사용 에러
파일 참조 오류
런타임 에러
- 프로그램이 실행되는 도중 발생하는 에러이다.
- 코드가 실행될 때 발견되는데, 논리적 오류나 예상치 못한 상황에 발생한다.
range (범위초과에러)
예외처리
네트워크 연결
참고) JIT 컴파일, AOT 컴파일
JIT 컴파일: 개발할 때
AOT 컴파일: 배포할때
JIT 컴파일 (just-in-time)
Debug Mode (개발용)
- 프로그램이 실행되는 동안 소스 코드를 수정할 수 있으므로 애플리케이션을 중지하고 다시 컴파일할 필요가 없다.
- 즉, 즉시 화면에 변경 사항을 반영할 수 있디 : 핫 리로딩(hot reload) 기능
AOT 컴파일 (ahead-of-time compile)
Release Mode (배포용)
- [Ahead-Of-Time : 미리, 사전에]
- 한마디로 사용자에게 프로덕트가 내보이기 전에, 미리 컴파일을 해서 준비해둔다는 뜻
- AOT 컴파일을 사용하면 일종의 번역을 통해 Dart 프로그램을 특정 플랫폼별 실행 가능 바이너리 파일로 변환한다.
(ex. Android의 경우 .apk를 얻을 수 있고, iOS의 경우 .iap를 얻을 수 있으며, Windows의 경우 .exe를 얻을 수 있다.)
- 배포할 때는 미리 컴파일이 돼 있어야 더욱 리소스를 효율적으로 사용할 수 있다.