고수는 문법을 더 많이 외운 사람이 아니라, 코드를 읽을 때 질문의 순서가 고정된 사람이다. 타입의 소유, 수명, 예외, 스레드, 복잡도를 시그니처에서 먼저 본다.

C++ 30. 고수가 코드를 읽는 순서의 핵심 흐름도
그림. 고수의 리뷰는 문법보다 소유권, 수명, 실패 경계를 먼저 본다.

읽는 순서

  1. 공개 함수의 이름과 매개변수에서 소유가 넘어가는지 본다. 값, 참조, `unique_ptr`가 각각 다르게 말한다.
  2. 불변식이 생성자 밖에 새지 않는지 본다.
  3. 자원을 사람이 `lock`과 `delete`로 짝짓고 있는지 본다. RAII가 아니면 경로를 하나씩 따라간다.
  4. 공유 가변 상태가 있으면 어떤 뮤텍스 또는 어떤 atomic이 지키는지 찾는다. 없으면 데이터 경합이다.
  5. 반복이 컨테이너를 무효화하면서 도는지 본다.

실무에서 남는 습관

헤더는 필요한 선언만 포함한다. 구현 세부 타입을 헤더에 두면 그 헤더를 포함하는 모든 파일이 다시 컴파일되고, 이진 호환도 깨지기 쉽다. 자주 바뀌는 구현은 소스 파일로 숨긴다.

표준의 동작은 2차 설명이 아니라 표준과 cppreference에서 확인한다. 블로그의 코드가 경고 없이 돈다는 이유만으로 수명이 맞다고 결론내지 않는다. 리뷰에서는 새 기능보다 먼저 미정의 동작, 예외 안전, 잠금 순서를 묻는다.

이 30편은 그 질문을 순서대로 쌓은 것이다. 1편의 `main`에서 시작한 프로그램이 29편의 수명과 30편의 리뷰 질문으로 돌아온다. 다음 코드에서 포인터를 보면 소유인지 빌림인지부터 말하면, 기초에서 고수로 넘어온 것이다.