에러의 개념

에러(오류)의 사전적인 개념은 그릇되어 이치에 맞지 않는 일을 의미한다. 개발하다가 자주 만나게 되는 컴퓨터의 에러부터 실생활에서 이야기하다가 만나는 논리적 에러 등등, 우리의 실생활에는 정말 많은 에러들이 있다. 그리고 수많은 에러들은 우리를 매우 당황하게 만들고 짜증나게 만든다.

흔하게 볼 수 있는 404 에러

흔하게 볼 수 있는 404 에러

만약 에러를 과제를 푸는 도중이나 개발 중에 만난다면 다행이지만, 완성된 프로그램을 평가 받거나 배포를 한 뒤에 항상 어디선가 예상치 못한 곳에서 만난 10년 전 옛 친구처럼 나온다. 이러한 치명적인 상황은 개발자를 위험하게 만들고 우리를 너무 당황하게 만들기에, 머리를 쥐어뜯고 신중을 기해서 에러를 피하려고 노력하고 디버깅을한다. 즉 에러는 상황에 따라 우리에게 매우 부정적인 경험을 준다.

에러의 종류

에러의 종류는 크게 3가지로 나눌 수 있다.

  1. 컴파일 에러 : 소스코드를 컴파일할 때 발생하는 에러로 오타, 문법 오류, 변수 타입 불일치 등등 언어적인 이유로 일어난다. 코드가 실행되기 전에 일어나는 오류라서 소스 코드를 꼭 수정해야만 한다.

    스크린샷 2023-04-26 오후 5.41.22.png

  2. 런타임 에러 (예외) : 프로그램 실행 도중 일어나는 에러로 0으로 나누기, 배열 인덱스 벗어남 등등 주로 이 부분에서 예기치 못한 동작이 일어난다. 개발자들은 이 부분을 막기 위해 예외 처리를 통해 안정적인 기능을 하게 한다. 컴퓨터는 이 경우에 segfault나 abort를 보여준다.

    -fsanitize=address 붙이고 일부러 터뜨린 예제

    -fsanitize=address 붙이고 일부러 터뜨린 예제

    1. ABORT : 프로그램이 실행 중 강제로 종료될 때 호출되는 함수로, 강제 종료와 동시에 프로그램 실행 중 생성된 모든 파일이 삭제된다.

    2. SEGFAULT : 프로그램이 메모리 공간을 잘못 사용했을 때 발생하며 발생되는 경우는 주로

    가 있다. 우리가 뮬리넷에서 볼 수 있는 SIGSEGV도 SEGFAULT의 일종이다.

    라피신의 채점 메일에서도 잡아주는 오류!

    라피신의 채점 메일에서도 잡아주는 오류!

  3. 논리적 에러 (버그) : 문법적인 오류는 없지만 프로그램이 의도한 대로 동작하지 않는 경우로 프로그램이 잘못된 변수를 사용하거나 잘못된 조건문을 사용하는 등 많은 상황에서 일어나는 에러이다. 이 에러를 없애기 위해 디버깅을 해야한다.

에러의 참기능?

하지만 에러는 예상치 못한 상황이 발생했을 때 프로그램이 멈추는 것을 방지해서 안정적인 프로그램 구동을 도와주고, 디버깅에서 오류 메세지를 통해 개발자가 오류를 파악하고 수정하도록 도와주는 등등 중요한 역할을 한다. 그 뿐만 아니라 의도된 에러는 사용자의 경험에서도 좋은 경험을 안겨준다. 사용자가 잘못된 사용을 할 경우 적절한 메세지를 보여줘서 다시 올바른 사용법을 유도하는 역할을 한다. 그래서 에러 메세지를 단순히 쓰는 것만이 아니라 좋은 에러 메세지를 보내주는 것 또한 매우 중요하다.

좋은 에러 메시지를 만드는 6가지 원칙

결국 에러는 개발하는 시점이나 의도된 에러 메세지를 통한 유도를 받는 사용자 입장에선 매우 유용하지만, 약간 의도치 않은 에러 메세지를 받은 사용자라면 매우 당황하고 이 프로그램에 대한 신뢰도는 매우 내려갈 것이다.