한우는 맛있어
소문난 한우 맛집
한우는 맛있어
전체 방문자
오늘
어제
  • 분류 전체보기 (6)
    • 개인 프로젝트 (0)
    • 공부방 (6)
      • Java (2)
      • Web (1)
      • Netty 서버 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 에러
  • 동기
  • 논 블로킹
  • 블로킹
  • Non - Blocking
  • Java
  • 예외 처리
  • Netty 기초
  • Asychronos
  • 예외
  • blocking
  • try-with-resource
  • error
  • Synchronos
  • 비동기
  • Exception

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
한우는 맛있어

소문난 한우 맛집

에러(Error)와 예외(Exception)
공부방/Java

에러(Error)와 예외(Exception)

2023. 1. 17. 02:05

개발을 하다보면  가장 자주 보게되는 콘솔 로그는 오류 또는 예외로 인한 로그입니다. 하지만  막상 누군가 에러와 예외에 관해 차이점을 묻는 다면 선뜻 대답하기가 어려운 것 또한 사실입니다. 그래서 에러와 예외를 잘 정리해서 누가 물어도 대답할 수 있도록 해당 부분에 대해 포스팅해보고자 합니다.


에러(Error)

에러란 무엇일까? 

프로그램 실행 중 오작동을 일으키거나 비정상적인 종료가 일어나게 하는 원인

 

 즉 에러는 개발자가 미리 예측하지 못한 곳에서 발생하기 때문에 개발자는 이를 방지할 수 없습니다. 또한 에러가 발생하는 원인을 살펴보면 내부적으로 프로그램 설계에 문제가 있어서 에러(논리적 에러) 가 발생하기도 하며 외부적으로는 하드웨어에서 문제가 생겨 오류가 발생해 프로그램이 종료될 수도 있습니다.

 

 

에러의 종류는 어떤 것이 있을까?

발생 시점에 따라 에러를 구분한다면 총 3가지로 분류할 수 있습니다. 
1. 컴파일 에러 
2. 런타임 에러 
3. 논리적 에러

 

컴파일 에러 

  • 컴파일러가 소스 파일을 컴파일 하는 시점에서 나타는 수 있는 에러 (EX : 문법 에러 - 오타 혹은 잘못된 구문, 자료형 체크)
  • 프로그램이 실행되기 전에 알 수 있기 때문에 개발자 입장에서 가장 쉽게 해결할 수 있습니다.(컴파일 에러시 프로그램 자체가 실행이 안되요...)
  • IDE를 통해서 쉽게 알 수 있습니다.

 

런타임 에러

  • 컴파일이 끝나고 프로그램을 실행하는 도중 개발자가 의도하지 않은 결과를 얻게하거나 하드웨어의 결함으로 프로그램이 비정상적으로 종료시키는 에러가 런타임 에러입니다.
  • 대체적으로 설계를 잘못했을 때 자주 발생하는 에러로 디버깅 로그를 통해서 개발자는 에러가 난 지점을 역추적해서 원인을 파악하고 수정해야합니다.
  • 런타임 에러를 줄이기 위해서는 개발자는 프로그램이 실행될 수 있는 여러 경우를 고려해서 개발을 해내가야합니다.

 

논리적 에러

  • 프로그램이 실행하고 작동하는 데에 아무런 문제를 발생시키지 않는 에러이지만 사용자가 기대한 결과를 얻지 못하게 하여 서비스 이용을 어렵게 만들 수 있습니다.
  • 쇼핑몰에서 장바구니에 담은 상품 총 가격이 마이너스로 나오거나 내 ID와 PW를 사용해 로그인했지만 다른 사람 계정으로 로그인 되는 경우가 논리적 에러에서 속합니다.
  • 해당 오류는 에러 로그를 보여주지 않기 때문에 개발자는 오류를 수정하기 위해 알고리즘을 정확히 분석해야합니다. 

 

에러(Error) VS 예외(Exception)

위 글에서 에러에 관해 대략적인 개념이나 케이스를 살펴보았지만 아직까지도 예외나 에러가 무엇이 다른지 알 수 없기 때문에 자바에서 구현해놓은 클래스를 통해 이를 비교해보겠습니다.

 

자바에서 발생하는 예외 클래스를 살펴보면 크게 Throwable 클래스를 상속받는 Error 클래스와 Exception클래스로 구분하여 사용하고 있습니다.

  • Error 클래스를 상속받는 클래스 : OutOfMemoryError, StackOverflowError
  • Exception 클래스를 상속받는 클래스 : IOException, RuntimeException

해당 Error클래스를 상속받는 클래스들을 살펴보면 OutOfMemoryError, StackOverflowError 클래스 모두 JVM 실행에 문제를 발생시키기 때문에 개발자가 수동으로 대처할 수 있는 방법이 없습니다. 하지만 NullPointerException과 같은 문제들은 개발자가 대응 코드를 통해 충분히 예외를 처리하여 비정상적인 종료를 미리 방지할 수 있습니다.

 

 위 개념들을 통해 에러(Error) 와 예외(Exception)의 차이점을 살펴 보자면

에러(Error)는  개발자가 미리 방지하거나 예상할 수 있는 범위를 벗어난 오류를 말하며 일단 발생하면 프로그램이 종료되는 심각한 오류라고 정의할 수 있으며 예외(Exception)는 개발자가 충분히 예견할 수 있고 발생하더라도 수습할 수 있는 작은 오류이며 에러(Error)처럼 프로그램이 완적히 죽는 경우는 매우 드뭅니다.   나중에  예외로 인해 프로그램이 종료되는 일이 없도록 처리할 수 있게 해주는 try ~ catch 문이나 try ~ with ~ resource 구문을 이용한 예외처리하는 방법에 대해서도 공부해서 포스팅해보도록 하겠습니다.  

'공부방 > Java' 카테고리의 다른 글

Try-with-resources 문을 이용한 예외 처리  (0) 2023.01.25
    '공부방/Java' 카테고리의 다른 글
    • Try-with-resources 문을 이용한 예외 처리
    한우는 맛있어
    한우는 맛있어
    한우를 좋아하는 개린이(개발 어린이) 블로그입니다.

    티스토리툴바