코딩과 결혼합니다

[CS] Java 에러&예외 본문

2세/Computer Science

[CS] Java 에러&예외

코딩러버 2023. 11. 24. 17:44
728x90

프로그래밍의 오류 종류

  • 컴파일 에러 : 컴파일 시에 발생
  • 런타임 에러 : 실행 시에 발생
  • 논리적 에러 : 실행은 되지만 의도와 다르게 동작

 

컴파일

  • 주어진 언어로 작성된 컴퓨터 프로그램을 다른 언어의 동등한 프로그램으로 변환하는 프로세스(빌드)
  • 대체로 문법상의 에러
  • 에러가 발생한 부분을 알려준다.
  • 예) ';' 누락 / 괄호가 안 맞음 / classpath에 누락된 클래스

런타임

  • 프로그램이 컴파일된 후 실행하면서 에러 발생
  • 대부분 개발 시 설계 미숙(논리적)으로 발생
  • 에러 발생 시 프로그래머가 역추적하여 원인을 확인해야 한다.
  • 예) NullPointerException / 무한루프 / 0으로 나누는 경우

논리

  • '버그'
  • 프로그램이 멀쩡히 돌아가는 것이니 에러 메시지를 알려주지 않는다.
  • 개발자는 프로그램의 전반적인 코드와 알고리즘을 체크해야 한다.
  • 예) 재고량이 음수가 나오는 경우 / 게임 캐릭터의 피가 0이어도 죽지 않는 경우

 

에러 : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류
예외 : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류

 

에러는 메모리 부족이나 스택오버플로우와 같이 일단 발생하면 복구할 수 없는 심각한 오류이고 예측이 불가능하다.

에러는 JVM 실행에 문제가 생긴 것이므로 개발자가 대처할 방법이 없다.

 

대부분의 예외는 개발자가 구현한 로직에서 발생한 실수나 사용자의 영향에 의해 발생한다. 이에 대한 대응 코드를 미리 작성해 놓음으로써 어느 정도 프로그램의 비정상적인 종료 혹은 동작을 막을 수 있다.


예외 클래스 계층 구조

  • Exception 및 하위 클래스 : 사용자의 실수와 같은 외적인 요인에 의해 발생, 컴파일 시 발생하는 예외
    • FileNotFoundException : 존재하지 않는 파일의 이름 입력
    • ClassNotFoundException : 클래스의 이름을 잘못 기재
    • DataFormatException : 입력한 데이터 형식이 잘못된 경우
  • RuntimeException 클래스 : 프로그래머의 실수로 발생하는 예외
    • IndexOutOfBoundsException : 배열의 범위를 벗어남
    • NullPoniterException : 값이 null인 참조 변수의 멤버를 호출
    • ClassCastException : 클래스 간의 형 변환을 잘못함
    • ArihtmeticException : 정수를 0으로 나누는 산술 오류

+ 런타임 예외 클래스


Checked Exception / Unchecked Exception

 

Checked Exception - 컴파일 예외 클래스들

  • 반드시 예외 처리를 해야 한다.
  • 발생할 가능성이 있는 메서드라면 반드시 로직을 try - catch로 감싸거나 throws로 던져서 처리해야 한다.
  • Unchecked Exception으로 변환시켜 컴파일에서 예외처리를 강제하지 않게 할 수 있다.
    런타임 예외로 처리해도 될 것들이 아직 Checked Exception으로 등록되어 강제적으로 try - catch를 사용해야 하는 불편함과, 로직상 Runtime Exception을 쓸 수밖에 없는 경우가 있기 때문에 추가된 기법이다.
throw new RuntimeException(new IOException(""));

 

Unchecked Exception - 런타임 예외클래스들

  • 명시적인 처리를 하지 않아도 된다.

'2세 > Computer Science' 카테고리의 다른 글

[CS] 보안(DOS)  (1) 2023.11.15
[CS] RESTful API 를 작성하기 위하여 고려할 것  (1) 2023.11.14
[CS] 모노레포(monorepo)  (0) 2023.11.13
[CS] 서버리스(Serverless)  (0) 2023.11.09
[CS] Docker  (0) 2023.11.08