프로그램을 돌렸을 때 RuntimeError 가 발생하여 꺼지는 등, compile과 runtime 이 자주쓰이는 용어임에도 개념이 정리되어있지 않은 것 같아 이번에 정리해보려한다.
Runtime 과 CompileTime
Java 와 같은 고급 언어로 작성된 명령이나 소스 코드는 컴퓨터가 이해할 수 있도록 기계어로 변환되어야 한다.
Compile Time 은 소스 코드가 컴파일러에 의해 기계어로 변환되는 시간으로 소스 코드는 .java에서 .class로의 바이트 코드로 변환된다. 이 시간 동안에 컴파일러가 코드의 구문 등을 확인한다.
Runtime 은 프로그램이 실행되는 기간이며 일반적으로 컴파일 시간 이후에 발생한다.
CompileTime Error
Java를 기준으로 Java의 문법에 맞지 않게 작성하면 컴파일러는 프로그램을 컴파일하는 동안 해당 요소에 대해 오류를 발생시킨다. 흔하게 실수하는 예를 통해 이해해보자.
- 세미콜론(;) 을 빠뜨린 경우
System.out.println("Hello world!");
System.out.println("Hello world!") // X
- 변수 초기화를 하지않은 경우
int a;
System.out.println(a);
변수를 초기화하지 않고 출력하는 코드를 돌렸을 때, build 가 실패했음을 확인할 수 있다.
Runtime Error
사용자가 프로그램을 시작할 때 메모리를 할당하고 프로그램을 필요한 라이브러리와 연결하는 로더가 실행되어 실행 준비를 마친다. 이후 프로그램이 실행되는 기간을 Runtime 이라고 하며, 에러가 여러가지 이유로 발생할 수 있다.
- 0으로 나눈 경우
int a = 10;
int b = 0;
System.out.println(a/b);
위의 예제를 돌려보면, build는 성공하고 프로그램 실행 후 에러와 함께 종료되었음을 확인할 수 있다.
정리
compiletime과 runtime 말고도 link time, load time 등 전체적인 lifecycle을 공부하면 좋을 것 같다.
참고
https://www.stackpath.com/edge-academy/what-is-runtime/
https://www.baeldung.com/cs/runtime-vs-compile-time
https://www.javatpoint.com/compile-time-vs-runtime
https://www.theserverside.com/tutorial/The-most-common-compile-time-errors-in-Java
https://www.techtarget.com/searchsoftwarequality/definition/runtime
'Web' 카테고리의 다른 글
[JPA] Dirty Checking 동작 방식 및 성능 개선 (2) | 2023.09.03 |
---|---|
[Spring] Maven Scope 와 Gradle Configurations (0) | 2023.08.27 |
[Spring] XSS Prevention (2) | 2023.07.31 |
[Spring] Unit Tests with Mockito ( in Service Layer ) (0) | 2023.07.25 |
[Spring] MapStruct 사용하기 (0) | 2023.07.08 |