Just go for it

[혼공얄코] Chapter 03-4 오류라는 위험에 대비하기 본문

혼공 시리즈/혼공얄코

[혼공얄코] Chapter 03-4 오류라는 위험에 대비하기

RachelLee 2024. 2. 2. 18:10

집에서 새는 바가지와 밖에서 새는 바가지 컴파일 오류, 런타임 오류

개발이란 끊임없는 오류와의 싸움입니다. 아무리 잘 설계하고 프로그래밍한 소프트웨어도 오류로부터 자유로울 수는 없습니다. 오류는 개발자의 실수, 예기치 못한 돌발 상황, 사용자의 제품 오용 등 다양한 이유로 발생함

좋은 개발자는 오류를 최소화하는 코드를 짜고, 오류의 원인을 빠르게 분석해서 근본적인 문제를 제거합니다.

 

컴파일 오류

- 프로그램을 사용자에게 배포하기 전에 발견할 수 있는 오류

- 컴파일 오류시 빌드 자체가 되지 않기 때문에 고객에게 오류가 전달되지 않음

- 오류 발생 원인이 뚜렷하기 때문에 파악이 쉬움

 

신택스 오류 = 구문 오류

-  프로그래밍 언어의 사용법이 맞지 않는 코드로 인해 발생하는 오류

 

런타임 오류

- 프로그램 실행 중, 즉 런타임에 발생하는 런타임 오류

- 설계상의 결함, 개발자의 의도와 다른 사용자의 행동, 연계된 다른 프로그램의 장애, 시스템상의 문제 등 무수히 많은 요인으로 발생

- 컴파일 과정이 없는 인터프리터 언어에서 발생하는 오류는 모두 런타임 오류

- 일반적으로 프로그램이 배포되기 전에 문제가 없는지 확인하는 테스트 과정을 거치지만 사용자는 개발자들이 생각하지 못한 방법으로 프로그램을 사용하다가 테스트에서 거르지 못한 오류를 발견하곤 합니다. 

 

오류 VS 버그

1. 문제의 주체가 누구인지로 구분하는 관점

버그는 개발자에 의해, 오류는 프로그램 사용자에 의해 발생하는 것

2. 버그를 오류의 결과로 보는 것

개발자가 작성한 코드에 결함이 있으면 '오류', 그 결과로 프로그램이 의도와 다르게 동작하는 것을 '버그'라고 부름

 

잘된다고 안심은 금물! 논리 오류

논리 오류

- 컴파일이나 실행 자체는 성공하지만 잘못된 결과를 반환하는 오류

- 알고리즘상의 논리적 결함이나 코드상의 문제로 발생

- 문제가 바로 눈에 띄지 않기 때문에 가장 경계해야 할 오류

- 프로그램이 설계 의도에 맞게 올바른 연산을 해내고 정확한 값을 반환하는지 항상 주의 깊게 확인해야 함

오류를 우아하게 받아내는 방법 예외 처리

사용자의 행동, 연계된 다른 프로그램의 작동, 네트워크 상태 등 다양한 상황이 변수로 작용하는 경우,

개발자의 개발 의도와 예상을 벗어난 값이 문제를 일으키면 오류가 발생할 수 있는데 이러한 상황에서 프로그램을 끄거나 리셋하지 않고 오류를 '우아하게'넘기는 방법

- 자바, try-catch

- 파이썬, try-except

루비, resure

다 썼으면 치워 주세요 메모리 누수, 가비지 컬렉션

메모리 누수

컴퓨터의 메모리가 가득차 공간이 부족해지면 런타임 오류로 이어지는 것처럼 메모리 공간에 불필요한 데이터가 쌓여서 남아있는 것

 

가비지 컬렉션

-파이썬, 자바 등 현대적인 언어에서는 이 메모리 관리를 상당 부분 자동으로 처리해주는 기능이 있는데 이것을

쓰레기 수집 또는 가비지 컬렉션이라고 합니다.

- 덕분에 개발자는 메모리를 크게 신경 쓰지 않아도 문제없이 프로그래밍을 할 수 있음

 

가비지 컬렉션의 한계

- 프로그램이 동작하는 도중 불특정 시점에 실행되는데, 이때 언어의 쓰레기 수집 방식에 따라 프로그램이 부분적으로 혹은 전체적으로 중단됨

- 불필요한 데이터를 모두 제거하지 못한다는 점

- 소스 코드상의 어떤 요소는 컴퓨터가 비워도 되는 데이터로 인지하지 못하고 남겨두는 경우가 있는데 가바지 컬렉터를 사용해도 메모리 누수가 생길 수 있음

- 전적으로 의존하지 말고 해당 언어에서의 메모리를 효과적으로 관리할 수 있는 방법을 꾸준히 공부해야 함

 

표로 정리하는 핵심 포인트

컴파일 오류 컴파일 단계에서 발생하는 경우 - 키워드, 맞춤법이 틀린 경우
- 필요한 문장 부호가 빠진 경우
- 선언되지 않은 변수를 사용한 경우
런타임 오류 프로그램 실행 중 발생하는 경우 - 0으로 나누는 경우
- 무한 루프에 빠지는 경우
- Null 오류
논리 오류 컴파일 및 실행은 되지만 사용자가 의도한 결과가 나오지 않는 경우
구문 오류 프로그래밍 언어의 사용법에 맞지 않는 코드로 인해 발생하는 경우

 

확인 문제

더보기

1. 다음 중 문장에 들어갈 알맞은 단어를 보기에서 찾아 써 보세요

- 실행 전 빌드가 필요한 언어에서 문법이 잘못됨에 인해 발생하는 오류는 (컴파일)오류입니다.

- 예측 불가능한 요소에 의해 발생할 수 있는 런타임 오류는 (예외 처리)로 대비할 수 있습니다.

- 컴파일과 실행 모두 성공하지만 실행 결과가 올바르지 않는 오류는 (논리)오류 입니다.

 

2. 다음 중 틀린 것을 고르세요

5

3. 다음 중 나머지 넷과 종류가 다른 오류를 고르세요

1

4. 다음 중 가비지 컬렉션에 대해 틀린 것을 고르세요

2

5. 다음 중 틀린 것을 고르시오

3