JPQL 과 QueryDSL의 차이가 런타임 시점과 컴파일 시점의 차이라고 보니,
이 둘의 차이점에 대해서 명확하게 알고 싶어졌다.
런타임 시점과 컴파일 시점은 프로그램이 실행되는 시기의 차이를 나타낸다고 한다.
컴파일 시점
컴파일 시점은 소스 코드를 컴파일하여 실행 파일로 만드는 시점이다.
이 시점에서는 코드의 문법적 오류를 검사하고, 컴파일러가 코드를 기계어로 번역하여 실행 파일을 만든다.
따라서 컴파일 시점에서는 코드의 문제를 발견하고 수정할 수 있습니다.
런타임 시점
런타임 시점은 프로그램이 실행되는 시점이다.
이 시점에서는 실행 파일이 메모리에 로드되어 프로그램이 실행되기 때문에, 런타임 시점에서는 코드의 문제를 발견하고 수정하기가 어렵다.
예를 들어, JPQL은 런타임 시점에 쿼리를 생성하고 해석한다. 따라서 쿼리에 문제가 있을 경우, 이를 발견하고 수정하기가 어려울 수 있다. 반면에 QueryDSL은 컴파일 시점에 쿼리를 생성하므로, 코드의 문제를 빠르게 발견하고 수정할 수 있다.
따라서 런타임 시점과 컴파일 시점의 차이는 코드의 문제를 발견하고 수정할 수 있는 시기의 차이를 나타내며, 이는 코드의 유지 보수성과 안정성에 영향을 미친다.
런타임 오류 (ArithmeticException)
public class Example {
public static void main(String[] args) {
int a = 10;
int b = 0;
int c = a / b;
System.out.println(c);
}
}
위 예제는 컴파일은 성공하지만, 런타임에서는 ArithmeticException 예외가 발생한다.
이는 컴파일 시점에서는 변수의 값이 어떻게 될지 모르기 때문에 오류를 발견하지 못하지만, 런타임 시점에서는 변수의 값이 0이 되어 나누기 연산이 불가능해지므로 오류가 발생한다.
컴파일 오류 (String cannot be converted to int)
public class Example {
public static void main(String[] args) {
String a = "Hello";
int b = 10;
int c = a / b;
System.out.println(c);
}
}
위 예제는 컴파일러가 "String cannot be converted to int" 오류를 발견하여 컴파일 시점에서 오류를 수정할 수 있다. 따라서 런타임에서 발생하는 오류를 미리 방지할 수 있다.
컴파일 시점에서 오류를 발견할 수 있는 예시
- 오타나 문법 오류
- 변수명을 잘못 입력하거나 중괄호나 괄호를 누락하는 등의 문법 오류는 컴파일러가 오류를 발견할 수 있다.
- 타입 불일치
- 문자열을 정수형으로 변환하거나 정수형을 부동소수점으로 변환하는 등의 타입 불일치 오류는 컴파일러가 오류를 발견할 수 있다.
- 메서드 시그니처 오류
- 메서드를 호출할 때 매개변수의 타입이나 개수가 잘못되면 컴파일러가 오류를 발견할 수 있다.
런타임 시점에서 발생하는 오류
- NullPointer 예외
- null 값을 가진 객체를 참조할 때 발생하는 NullPointer 예외는 컴파일 시점에서는 발견할 수 없으며, 런타임 시점에서 발생한다.
- 배열 인덱스 범위 초과 예외
- 배열의 인덱스를 벗어난 값으로 접근할 때 발생하는 배열 인덱스 범위 초과 예외는 컴파일 시점에서는 발견할 수 없으며, 런타임 시점에서 발생한다.
- 클래스 캐스팅 예외
- 클래스 캐스팅을 잘못하거나 존재하지 않는 클래스를 참조할 때 발생하는 클래스 캐스팅 예외는 컴파일 시점에서는 발견할 수 없으며, 런타임 시점에서 발생한다.
'애플리케이션 개발 > JAVA' 카테고리의 다른 글
[java] jdbc:log4jdbc: SQL 로깅 드라이버 사용 시 주의할 점 (0) | 2025.04.07 |
---|---|
Git과 SVN의 차이 (0) | 2023.04.14 |
[JAVA] 변수의 종류와 메모리 구조 (0) | 2022.11.23 |
[JAVA] String vs new String() (0) | 2022.11.14 |
[JAVA] Java Serialization (0) | 2022.07.26 |