진소희
1. 📌 핵심 개념 정리
✅ 요약하기
- 주석
- c1: 부적절한 정보
- 다른 시스템에 (예를 들어, 소스 코드 관리 시스템, 버그 추적 시스템, 이슈 추적 시스템, 기타 기록 관리 시스템에) 저장할 정보는 주석으로 적절하지 못하다.
- 일반적으로 작성자, 최종 수정일, SPR번호 등과 같은 메타 정보만 주석으로 넣는다.
- 주석은 코드와 설계에 기술적인 설명을 부연하는 수단이다.
- c2: 쓸모 없는 주석
- 쓸모 없어질 주석은 아예 달지 않는 편이 가장 좋다.
- 코드와 무관하게 혼자서 따로 놀며 코드를 그릇된 방향으로 이끈다.
- c3: 중복된 주석
- 코드만으로 충분한데 구구절절 설명하는 주석이 중복된 주석이다.
- c4: 성의 없는 주석
- 단어를 신중하게 선택한다. 문법과 구두점을 올바로 사용한다. 주절대지 않는다. 당연한 소리를 반복하지 않는다. 간결하고 명료하게 작성한다.
- c5: 주석 처리된 코드
- 주석으로 처리된 코드를 발견하면 즉각 지워버려라. 소스 코드 관리 시스템이 기억하니까 걱정할 필요 없다.
- c1: 부적절한 정보
- 환경
- E1: 여러 단계로 빌드해야 한다
- 빌드는 간단히 한 단계로 끝나야 한다.
- 소스 코드 관리 시스템에서 이것저것 따로 체크아웃할 필요가 없어야 한다.
- 불가해한 명령이나 스크립트를 잇달아 실행해 각 요소를 따로 빌드할 필요가 없어야 한다.
- 한 명령으로 전체를 체크아웃해서 한 명령으로 빌드할 수 있어야 한다.
- E2: 여러 단계로 테스트해야 한다.
- 모든 단위 테스트는 한 명령으로 돌려야 한다. 모든 테스트를 한 번에 실행하는 능력은 아주 근본적이고 아주 중요하다. 따라서 그 방법이 빠르고, 쉽고, 명백해야 한다.
- E1: 여러 단계로 빌드해야 한다
- 함수
- F1: 너무 많은 인수
- 함수에서 인수 개수는 작을수록 좋다. 아예 없으면 가장 좋다.
- F2: 출력 인수
- 출력 인수는 직관을 정면으로 위배한다.
- 함수에서 뭔가의 상태를 변경해야 한다면(출력 인수를 쓰지 말고) 함수가 속한 객체의 상태를 변경한다.
- F3: 플래그 인수
- 플래그 인수는 혼란을 초래하므로 피해야 마땅하다.
- F4: 죽은 함수
- 아무도 호출하지 않는 함수는 삭제한다. 소스 코드 관리 시스템이 기억하니까 걱정할 필요 없다.
- F1: 너무 많은 인수
- 일반
- G1: 한 소스 파일에 여러 언어를 사용한다.
- 이상적으로는 소스파일 하나에 언어 하나만 사용하는 방식이 가장 좋다.
- 각별한 노력을 기울여 소스 파일에서 언어 수와 범위를 최대한 줄이도록 애써야 한다.
- G2: 당연한 동작을 구현하지 않는다.
- 최소 놀람의 원칙에 의거해 함수나 클래스는 다른 프로그래머가 당연하게 여길 만한 동작과 기능을 제공해야 한다.
- 당연한 동작을 구현하지 않으면 코드를 읽거나 사용하는 사람이 더이상 함수 이름만으로 함수 기능을 직관적으로 예상하기 어렵다.
- G3: 경계를 올바로 처리하지 않는다.
- 스스로의 직관에 의존하지 마라. 모든 경계조건을 찾아내고, 모든 경계 조건을 테스트하는 테스트 케이스를 작성하라.
- G4: 안전 절차 무시
- 실패하는 테스트 케이스를 일단 제껴두고 나중으로 미루는 태도는 신용카드가 공짜 돈이라는 생각만큼 위험하다.
- G5: 중복
- 코드에서 중복을 발견할 때마다 추상화할 기회로 간주하라. 중복된 코드를 하위 루틴이나 다른 클래스로 분리하라. 이렇듯 추상화로 중복을 정리하면 설계의 어휘가 늘어난다.
- G6: 추상화 수준이 올바르지 못하다.
- 추상화는 저차원 상세 개념에서 고차원 일반 개념을 분리한다.
- 모든 저차원 개념은 파생 클래스에 넣고, 모든 고차원 개념은 기초 클래스에 넣는다
- G7: 기초 클래스가 파생 클래스에 의존한다
- 개념을 기초 클래스와 파생 클래스로 나누는 가장 흔한 이유는 고차원 기초 클래스 개념을 저차원 파생 클래스 개념으로부터 분리해 독립성을 보장하기 위해서다.
- 기초 클래스는 파생 클래스를 아예 몰라야 마땅하다.
- G1: 한 소스 파일에 여러 언어를 사용한다.
- 자바
- J1:
- 이름
- 테스트
2. 🤔 이해가 어려운 부분
🔍 질문하기
책을 읽으며 이해하기 어려웠던 개념이나 명확하지 않았던 내용을 정리합니다.
- 개념 또는 원칙의 이름
- 어려웠던 부분
해당 개념이 헷갈리거나 명확하지 않았던 점을 구체적으로 설명합니다. - 궁금한 점
해당 개념이 어떤 원리로 동작하는지, 실무에서 어떻게 활용되는지 등을 질문 형태로 정리합니다.
- 어려웠던 부분
3. 📚 참고 사항
📢 논의하기
관련된 자료가 있다면 공유하고, 더 깊이 논의하고 싶은 아이디어나 의견을 정리합니다.
- 관련 자료 공유
- 추가 자료
BNCF FSM
- 추가 자료
- 논의하고 싶은 주제
- 주제
논의하고 싶은 내용을 간략히 정리합니다. - 설명
논의하고 싶은 이유를 작성합니다.
- 주제