cheoly's language study blog

사고를 줄이는 C 코드의 기준과 습관

C언어
반응형
SMALL

C를 오래 쓰는 사람들의 코드를 보면
문법이 특별히 화려하지는 않다.
대신 공통적으로 느껴지는 게 있다.

“이 코드는 함부로 터지지 않겠다.”

그 차이는 재능이 아니라
기준과 습관에서 나온다.


C에서 사고를 줄이는 방법은
의외로 복잡하지 않다.
대신 일관되어야 한다.


1) 메모리의 주인을 항상 명확히 한다

C 코드에서 가장 먼저 정리해야 할 건
포인터가 아니라 책임이다.

  • 누가 할당하는가
  • 누가 해제하는가
  • 언제까지 유효한가

이 세 가지 중
하나라도 흐릿하면
그 코드는 이미 위험하다.

좋은 C 코드는
메모리 사용법을 외우지 않아도
흐름만 읽어도 책임이 보인다.


2) 실패 경로를 먼저 설계한다

사고를 줄이는 사람들은
정상 흐름보다
실패 흐름을 먼저 생각한다.

  • 할당 실패 시
  • 입력이 비었을 때
  • 외부 호출이 끊겼을 때

이때 중요한 건
“어떻게 복구할 것인가”보다
“어디서 멈출 것인가”다.

실패를 감지했는데도
계속 진행하는 코드가
가장 많은 사고를 만든다.


3) 함수 하나를 작은 계약으로 다룬다

C 함수는 단순한 코드 묶음이 아니다.
작은 계약이다.

좋은 함수는
시그니처만 보고도 이게 드러난다.

  • 무엇을 기대하는지
  • 무엇을 보장하는지
  • 실패하면 어떤 상태인지

이게 코드나 주석으로 드러나지 않으면
그 함수는 언젠가 오해를 낳는다.


4) 경계 조건은 옵션이 아니라 기본값이다

사고가 적은 C 코드는
항상 가장 귀찮은 입력부터 생각한다.

  • 길이가 0인 데이터
  • 최대 길이를 넘는 입력
  • NULL이 들어오는 경우

이걸 “나중에 추가”하지 않는다.
처음부터 포함시킨다.

경계 조건을 기본값으로 두는 순간
코드는 훨씬 단단해진다.


5) 정리 코드를 작성하는 데 시간을 아끼지 않는다

C에서 종료 코드는
대충 쓰기 가장 쉽고,
사고가 나기 가장 쉬운 부분이다.

  • 리소스 해제 순서
  • 중복 해제 방지
  • 부분 실패 후 정리

이걸 꼼꼼히 작성하는 사람은
운영 환경에서 훨씬 덜 고생한다.

“어차피 끝나는 코드”라는 생각이
가장 많은 버그를 숨긴다.


6) 테스트는 신뢰가 아니라 의심이다

C 테스트의 목적은
“잘 된다”를 확인하는 게 아니다.

  • 어디서 깨지는지
  • 얼마나 버티는지
  • 실패하면 어떤 모양인지

이걸 확인하는 게 목적이다.

테스트하지 않은 경로는
안전한 게 아니라
아직 사고가 안 난 상태일 뿐이다.


C를 안전하게 쓰는 비결은
새로운 기법에 있지 않다.

  • 책임을 흐리지 않고
  • 실패를 가볍게 넘기지 않고
  • 경계를 처음부터 포함시키는 것

이 기준을
매번 지키는 사람의 코드는
시간이 지나도 크게 변하지 않는다.

C는 솔직한 언어다.
작성자가 준비한 만큼만
정확하게 동작한다.

그래서 C를 잘 쓰는 사람은
문법보다 먼저
자기 기준을 단단히 세운다.

반응형
LIST