#4 Pragmatic Paranoia
4장 실용주의 편집증
💻 실용주의 프로그래머: Topic 23 계약에 의한 설계 (Design by Contract, DBC)
1. 핵심 개념 — “좋은 프로그램은 신뢰의 계약으로 이루어진다”
2. 배경 — “사람의 계약에서 시스템의 계약으로”
3. DBC의 기본 구조 — “선행 조건 · 후행 조건 · 불변식”
구분
설명
예시
4. 코드 예시 — Clojure 스타일
5. 예외 발생 — 계약 위반의 결과
6. 다른 언어에서의 DBC 예시
7. DBC와 테스트 주도 개발(TDD)의 비교
항목
TDD
DBC
8. 의미론적 불변식 (Semantic Invariant)
9. 확장된 개념 — 동적 계약과 에이전트
10. 연습 문제 요약
번호
내용
11. 관련 항목
💻 실용주의 프로그래머: Topic 24
죽은 프로그램은 거짓말을 하지 않는다 (Dead Programs Tell No Lies)
1. 핵심 개념 — “실패를 숨기지 말고, 즉시 드러내라”
2. 배경 — “문제를 숨기면 더 큰 재앙이 온다”
3. 잘못된 예 — “예외를 삼켜버리는 코드”
4. 올바른 방식 — “명확하게 실패하라”
5. 철학 — “일찍 멈추는 것이 덜 아프다”
6. 실제 적용 — Erlang과 Elixir의 철학
7. 비교 — “계속 달리는 시스템 vs 멈추는 시스템”
방식
설명
결과
8. 현대적 적용 — Spring, Kotlin, Node.js에서의 Fail-fast 예시
환경
구현 예시
9. 관련 항목
💻 실용주의 프로그래머: Topic 25
단정적 프로그래밍 (Assertive Programming)
1. 핵심 개념 — “믿지 말고, 단정(assert)하라”
2. 단정문의 역할 — “거짓을 드러내는 장치”
3. 단정의 올바른 사용법
구분
설명
예시
4. 잘못된 예 — “단정으로 로직을 대체하지 말라”
5. 단정과 부작용 (Side Effect)
6. 단정 기능을 켜 두어라 — “죽이지 말고 살려둬라”
7. 실무 사례 — “실 서비스에서도 단정은 도움 된다”
8. 단정의 한계 — “모든 버그를 잡진 못한다”
9. 연습 문제 요약
10. 관련 항목
💻 실용주의 프로그래머: Topic 26
리소스 사용의 균형 (Balancing Resources)
1. 핵심 개념 — “자신이 시작한 것은 자신이 끝내라”
2. 문제 인식 — “대부분의 개발자는 해제를 잊는다”
3. 잘못된 예시 — “공유된 리소스와 결합된 루틴”
4. 리팩터링 — “책임을 한 함수 안으로 모아라”
5. Tip 41 — “지역적으로 행동하라”
6. 중첩 합당 — “여러 리소스를 다룰 때 순서를 지켜라”
7. 예외와 리소스 — “스코프가 닫히면 리소스도 닫혀야 한다”
언어
리소스 자동 해제 방식
8. 나쁜 예외 처리 방식 🚫
9. 리소스 계층의 균형 — “최상위 구조는 하위 구조를 해제해야 한다”
10. 실용적 점검 — “리소스의 생애를 추적하라”
11. 관련 항목
💻 실용주의 프로그래머: Topic 27
헤드라이트를 앞서가지 말라 (Don’t Outrun Your Headlights)
1. 핵심 개념 — “예측은 어렵다, 특히 미래에 대해서는”
2. 비유의 의미 — “투사 거리(throw distance)”
3. 소프트웨어의 교훈 — “우리의 헤드라이트도 제한되어 있다”
4. Tip 42 — “작은 단계를 밟아라, 언제나.”
단계
피드백 형태
5. 예측 대신 설계하라
6. 불확실성과 블랙 스완 (Black Swan)
7. GUI 전쟁의 교훈 — “예측은 거의 항상 틀린다”
8. Tip 43 — “예언하지 말라”
Last updated