버그는 간단히 말해 프로그래머에 의한 에러이다. 예를 들어, NULL 포인터를 호출하거나, 배열에서 오버플로우가 발생하거나, 할당된 메모리를 지우지 않은 경우(결국 메모리 누출로 이어지는)가 버그에 해당된다.
에러는 버그와 달리 일반적으로 응용 프로그램의 사용자에 의해서 발생한다. 예를 들어, 사용자가 주민등록번호를 입력하는 난에 이상한 문자열을 입력하는 경우가 있을 수 있다. 프로그래머가 이러한 경우를 대비해서 적절한 예외 처리를 하지 않았다면 에러가 발생한다.
예외는 일반적으로 런타임 오류와 관련된 것으로서, 예방하기가 어렵거나 불가능한 것들이다. 더 이상 존재하지 않는 데이터베이스에 연결하려고 한다거나, 손상된 파일을 열려고 하거나, 오프라인 상태인 머신에 접속하려고 하는 경우 예외가 발생할 수 있다. 프로그래머나 사용자는 이러한 '예외적인' 경우에 대처하기가 어렵다.
에러가 발생하긴 했지만 그 에러를 처리 방법이 없는 곳에서 에러가 발생했을때 에러 상태가 무엇인지 결정해 주기 위함이다.
버그의 정의를 해석해 보면 프로그램의 논리 처리 상에서 컴파일러가 감지하지 못하는 범위의 '개발 언어'자체의 구문 에러가 프로그램에 존재함을 의미하며, 이는 논리 처리 상의 정확한 구문을 사용함으로써 해결한다.
출처: https://hermeslog.tistory.com/72 [헤르메스 LIFE]