자바에서 발생하는 컴파일,런타임 에러가 뭐에요...?

buffet_psi·2023년 2월 23일

코테를 연습하거나 프로젝트를 실행시키면 많이 마주하는 대표적인 2가지 에러에대해서 알아볼거에요!!

#컴파일 에러

  • 자바코드를 컴파일하는 중 발생하는 에러입니다
    예를들어)
  1. 구문 오류 ex) int j = i에서 ;를 까먹었을때!
  2. 타입 오류 ex) int a = 5.5; (정수형인데 실수형으로 적을 때)
  3. 잘못된 import 구문
    ex) import java.util.*.ArrayList;
    (util패키지 안에있는 모든것을 import하려하고, ArrayList클래스를 모두 import하려했기 때문에)
    import java.utillll.ArrayList
    (utillll 라고 적어 오타가 났기때문에)
  4. 중복된 클래스 이름
    ex) public class Car{//Car의 내용} class Car{//Car의 내용}
    이렇게 Car 클래스를 만들고 또 Car 클래스를 만들게 되면 컴파일러는 이름이 같은 클래스가 2개 있어서 어떤 클래스를 사용해야 할지 혼란스러워지기 때문에 컴파일 오류가 발생합니다!
    (But!! 패키지를 분리하면 방지할 수 있긴합니다!!)

#런타임 에러

  • 자바 프로그램 실행중 발생하는 오류입니다!
    예를들어)
  1. 배열 인덱스 초과 ex)
int[] arr = new int[5];
arr[5] = 10; //인덱스 5는 배열의 범위를 벗어나므로 오류가 발생해요
  1. 0으로 나누기
  2. 클래스 캐스팅오류
class Animal {
    public void eat() {
        System.out.println("Animal is eating");
    }
}
class Dog extends Animal {
    public void bark() {
        System.out.println("Dog is barking");
    }
}
class Main {
    public static void main(String[] args) {
        Animal animal = new Animal();
        Dog dog = (Dog) animal; // 클래스 캐스팅 오류 발생
        dog.bark();
    }
}

위의 코드에서는 Dog은 Animal을 상속받은 클래스입니다
하지만 Main코드에서 Animal타입으로 선언된 객체 animal을
(Dog)타입으로 캐스팅할 때 오류가 발생해요!왜냐? Animal객체는 Dog클래스의 인스턴스가 아니기때문이에요!

  1. nullpointexception(널 포인트 참조 오류)
    ex)
	String str = null;
	System.out.println(str.length());

String 객체 str을 보시면 null;즉 비어있는 쓰레기값인데 바로 밑에 코드에서 그 쓰레기의 길이를 검사하려고 하네요 그러면 오류가 발생해요!
쓰레기(null)객체에 대해서 메서드나 인스턴스 변수를 참조하면 발생하는 오류입니다!

둘의 차이점 이해하셨나요? 이해 안되셨다면 한번더 정리들어갑니다!

  • 컴파일에러는 프로그램 실행 전에 발생한다!=>코드를 수정해서 해결가능!
  • 런타임에러는 프로그램 실행 중에 발생한다!
    =>프로그램 실행중 에러메시지를 통해 확인해서 수정한다!

(자바에의 경우)

컴파일 에러=> 클래스 파일을 생성할 수 없다는 메시지를 보낸다
런타임 에러=> 예외(Exception) 또는 오류(Error) 메시지를 보낸다.

profile
노력과효율!

0개의 댓글