일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- JPA
- 자바
- mysql
- network
- PostgreSQL
- 명령어
- java
- SQL
- 티스토리챌린지
- Linux
- MongoDB
- git
- MariaDB
- spring
- Javascript
- group by
- analytics4
- 리눅스
- 트랜잭션
- IntelliJ
- docker
- 오블완
- top
- mssql
- Python
- rsync
- 차이점
- oracle
- DBMS
- API
- Today
- Total
hanker
Java - 컴파일타임(Compile Time)과 런타임(Run Time)이 뭘까? 본문
프로그램의 실행과 관련된 중요한 개념인 컴파일 타임(Compile Time)과 런타임(Run Time)에 대해서 알아보자!
컴파일 타임 (Compile Time)
정의
- 컴파일 타임은 소스 코드를 기계어로 변환하는 컴파일 과정에서 발생하는 시간을 의미한다.
- 프로그램이 실행되기 전에 코드가 컴파일러에 의해 번역되고 오류를 검사하는 단계이다.
주요 특징
오류 감지: 컴파일러는 문법 오류(Syntax Error), 타입 오류(Type Error), 선언되지 않은 변수, 잘못된 메서드 호출 등을 검사한다.
정적 분석: 프로그램 실행 전 정적인 코드 구조만을 분석한다.
바이트코드 생성: Java의 경우, 컴파일 타임에 소스 코드(.java)가 바이트코드(.class)로 변환된다.
문법오류 예 :
public static void main(String[] args) {
System.out.println("Hello, World!"
}
타입오류 예 :
int number = "string";
런타임 (Run Time)
정의
- 런타임은 프로그램이 실행되고 있는 실제 동작 시간을 의미합니다.
- 프로그램이 사용자의 입력, 외부 환경, 파일, 네트워크 등과 상호작용하는 시점입니다.
주요 특징
- 실시간 실행: 런타임에 프로그램이 실행되며 사용자와 상호작용이 이루어진다.
- 예외 발생 가능: 프로그램이 실행 중 예상치 못한 상황에서 오류(예: NullPointerException, Division by Zero 등)가 발생할 수 있다.
- 동적 동작: 메모리 할당, 파일 입출력, 네트워크 연결 등 실행 중에만 처리할 수 있는 작업이 이루어진다.
NPE 예제
public static void main(String[] args) {
String text = null;
System.out.println(text.length()); // NullPointerException 발생
}
배열 인덱스 초과
public static void main(String[] args) {
int[] numbers = {1, 2, 3};
System.out.println(numbers[5]); // ArrayIndexOutOfBoundsException 발생
}
주요 차이점
특징 | 컴파일타임 | 런타임 |
시점 | 프로그램 컴파일 중 | 프로그램 실행 중 |
오류 유형 | 문법 오류(Syntax Error), 타입 오류 | 논리 오류, 예외(Runtime Exception) |
오류 처리 여부 | 컴파일러가 자동으로 감지 | 프로그래머가 직접 처리하거나 방어적 코딩 필요 |
주요 작업 | 코드 분석 및 바이트코드 생성 | 메모리 할당, 외부 리소스와 상호작용 |
실행 환경 | 컴파일러 | JVM 또는 CPU |
컴파일 타임 오류는 개발 단계에서 발견되므로 비교적 수정이 쉽고,
런타임 오류는 실행 중에 발생하므로 사전에 예방하기 위해 철저한 테스트와 예외 처리가 필요하다.
'JAVA' 카테고리의 다른 글
JAVA - 멀티스레딩 가이드 (구현부터 동기화까지) (0) | 2025.01.07 |
---|---|
Java - CheckedException과 UncheckedException이 뭐지? (0) | 2024.12.06 |
Java - Java Servlet 이란? (0) | 2024.12.04 |
JAVA - JAVA에서 쓰레드란 무엇이며, 어떻게 생성할까? (0) | 2024.12.03 |
JAVA - JAVA에서 가비지 컬렉션(GC)이란 무엇일까? (0) | 2024.12.02 |