방어적 프로그래밍이란?
더 안전한 코드를 위한 전략 제약과 어설션(assertion)
훌륭한 코드를 향해서
우리는 훌륭한 코드를 목표로 삼아야 한다.
방어적 프로그래밍은 잠재적인 코딩 문제가 쌓여가는 것을 방지하는 실무적인 방법.
최악을 가정하라
추측은 결함 있는 소프트웨어의 작성 원인이며, 방어적 프로그램을 작성할 때는 아무것도 추측하지 말아야 합니다.
각 단계에서 코드에 어떤 나쁜 일이 생길 수 있는지 생각해보자
사용자의 제어권 밖에 있는 일이 잘못될 수도 있다는 사실 (네트워크 오류, 디스크 풀, 컴퓨터 다운)
당장 할 수 있는 약간의 추가 작업을 건너뛰어서, 나중에 세상 전체를 고통과 지연으로 부터 구할 수 있는 기회를 놓치지말자.
험한 세상
방어적 프로그래밍은 이런 계획적인 악용을 경계하면서 프로그램의 보안을 돕는다.
좋은 코딩 스타일과 건강한 설계를 채용하라
대부분의 코딩 실수는 좋은 코딩 스타일을 채용해서 방지 할 수 있다.
코드 작성을 서두르지 마라
프로그램을 작성하면서 각 행에 대해 생각을 하자.
시간이 너무 오래 걸린다고 생각한다.. 각각에대해서 생각하는것들.. 많이하면 이것도 늘것인가?
=> 그때그때 하는것이 시간이 덜 걸릴 수 있다.
아무도 믿지 마라
항상 취약지점을 살펴보고, 방어적인 코드를 가지고 그런 위험을 경계하라고 하는데 취약지점이 뜻하는 바가 무엇일까요?
짧은 코드가 아니라 명료한 코드를 작성하라
코드를 간단하게 만들고 유지보수가 될 수 없는 코드는 안전한 코드가 아니다.
경고 스위치를 전부 켜놓고 컴파일 하라
컴파일러 경고를 항상 사용가능 상태로 설정하자
정적 분석 툴을 사용하라
정적 분석 툴 사용해보신분? C언어용 lint를 사용해보자.
모든 리턴 값을 체크하라
메모리를 조심해서 다뤄라
자원 관리를 철저히 하고, 실행 중에 얻은 모든 자원을 해제
모든 변수를 선언 지점에서 초기화하라
변수를 가능한 한 늦게 선언하라
하나의 임시변수를 여러곳에서 재사용하지 마라
좋은 진단 로깅 설비를 사용하라
진단로깅시스템이 뭐지?
디폴트 동작 제시하기 (switch, if)
Const로 만들 수 있는 것은 모두 const로 만들자
제약
전제조건
후행조건
불변조건
어설션
읽기 쉬운 프로그램은 대개 좋은 프로그램이고, 읽기 어려운 프로그램은 대개 좋은 프로그램이 아니다.
잘못된 곳을 찾아서 고칠 때 그 위치에 어설션을 끼워 넣는 것이 좋은 습관이다.
'프로그래밍 > Code Craft' 카테고리의 다른 글
[1부 코드와 마주보기] Chapter6 사람은 실수를 하기 마련 (0) | 2017.10.27 |
---|---|
[1부 코드와 마주보기] Chapter5 가벼운 코멘트 (0) | 2017.10.26 |
[1부 코드와 마주보기] Chapter4 문서화 도구 (0) | 2017.09.27 |
[1부 코드와 마주보기] Chapter3 이름이 뭐길래 (0) | 2017.09.26 |
[1부 코드와 마주보기] Chapter2 최고의 레이아웃 계획 (0) | 2017.09.22 |
댓글