본문 바로가기
  • hello world
Language/Studying

[Java] Compile-time과 Run-time

by JJoajjoa 2024. 7. 19.

 

프로그래밍 언어에서의 컴파일 타임"(compile-time)과 "런타임"(run-time)

프로그램의 생애 주기에서 서로 다른 단계

이 두 단계는 프로그램이 작성되고 실행되는 과정에서 중요한 역할!

 

 

컴파일 타임 Compile-time

▶ 소스 코드가 컴파일러에 의해 기계어(바이트코드)로 번역되는 단계

→ 이 단계에서는 프로그램의 구문 및 타입 오류가 발견됨

 

주요 활동:

  1. 소스 코드 분석: 컴파일러는 소스 코드를 구문 분석(파싱)하여 오류를 찾습니다.
  2. 타입 체크: 변수의 타입, 메서드 호출, 반환 타입 등이 올바른지 확인합니다.
  3. 코드 최적화: 일부 컴파일러는 코드를 더 효율적으로 실행하기 위해 최적화를 수행합니다.
  4. 바이트코드 생성: 자바에서는 소스 코드(.java 파일)가 바이트코드(.class 파일)로 변환됩니다.

컴파일 타임 오류:

  • 문법 오류: 잘못된 구문
  • 타입 오류: 잘못된 타입 사용
  • 클래스나 메서드가 존재하지 않는 경우

 

public class CompileTimeExample {
    public static void main(String[] args) {
        int x = 10;
        String y = "Hello";
        
        // 컴파일 타임 오류: 타입 불일치
        // x = y; // int 타입 변수에 String을 할당하려고 하면 오류 발생
        
        // 컴파일 타임 오류: 메서드 호출 오류
        // System.out.println(y.toUpperCae()); // 오타로 인해 메서드 호출 실패
    }
}

 

 

 

런타임 Run-time

▶ 컴파일된 프로그램이 실제로 실행되는 단계

→ 이 단계에서는 프로그램이 메모리에 로드되고, CPU에 의해 명령이 수행됨

 

주요 활동:

  1. 프로그램 실행: 컴파일된 바이트코드를 JVM이 로드하여 실행합니다.
  2. 동적 할당: 객체 생성과 메모리 할당이 수행됩니다.
  3. 입출력 작업: 파일 읽기/쓰기, 사용자 입력 처리 등
  4. 예외 처리: 실행 중 발생하는 예외를 처리합니다.

런타임 오류:

  • NullPointerException: 참조가 null인 객체에 접근하려 할 때 발생
  • ArrayIndexOutOfBoundsException: 배열의 유효한 인덱스를 벗어날 때 발생
  • ArithmeticException: 0으로 나누기 등 잘못된 산술 연산
  • ClassNotFoundException: 클래스를 찾지 못할 때 발생

 

public class RuntimeExample {
    public static void main(String[] args) {
        String str = null;
        
        // 런타임 오류: NullPointerException
        // System.out.println(str.length()); // str이 null이기 때문에 메서드 호출 시 오류 발생
        
        int[] arr = new int[5];
        
        // 런타임 오류: ArrayIndexOutOfBoundsException
        // System.out.println(arr[10]); // 유효한 배열 인덱스를 벗어나 접근하려고 하면 오류 발생
    }
}

 

 

 

 

 

 

 

요약

 

  • 컴파일 타임 (Compile-time): 소스 코드가 컴파일될 때 발생하는 시간. 주로 구문 오류 및 타입 오류를 검사합니다.
    • 주요 활동: 구문 분석, 타입 체크, 코드 최적화, 바이트코드 생성
    • 오류 유형: 문법 오류, 타입 오류
  • 런타임 (Run-time): 프로그램이 실제로 실행되는 시간. 실행 중에 발생하는 오류를 처리합니다.
    • 주요 활동: 프로그램 실행, 동적 할당, 입출력 작업, 예외 처리
    • 오류 유형: NullPointerException, ArrayIndexOutOfBoundsException, ArithmeticException

 

 

 

 

 

 

 

 

'Language > Studying' 카테고리의 다른 글

[JS] (소괄호) · {중괄호} · [대괄호]  (0) 2024.07.25
[JS] 1급객체와 콜백함수  (0) 2024.07.24
[Java] Exception 예외처리  (0) 2024.07.18
[Java] Overload와 Override (feat. 다형성)  (0) 2024.07.17
[Java] Java API  (0) 2024.07.17