티스토리 뷰
창발성
남이 모르거나 하지 아니한 것을 처음으로 또는 새롭게 밝혀내거나 이루어 내는 성질.
창발적 설계로 깔끔한 코드를 구현하자
켄트 벡이 제시하는 단순한 설계 네 가지는 소프트웨어 품질을 크게 높여준다고 한다.
- 모든 테스트를 실행한다.
- 중복을 없앤다.
- 프로그래머 의도를 표현한다.
- 클래스와 메서드 수를 최소로 줄인다.
1. 모든 테스트를 실행한다.
우리는 설계 단계에서 동작하는 시스템을 설계해야 한다. 하지만 그 설계가 실제로 동작하는 것인지 검증하는 단계가 반드시 필요하다.
그래서 테스트 케이스를 작성한다. 테스트 케이스를 작성하는 것만으로도 시스템 설계 품질이 향상될 수 있다.
테스트 케이스가 많을수록 개발자는 수많은 테스트 코드를 작성할 것이고 그 부분에서 추상화, 의존성 주입, 인터페이스와 같은 도구를 활용해서 시스템 내부 결합도를 낮추고 응집도를 올릴 수 있게 된다.
그러면서 결국 시스템의 설계 품질은 향상된다.
2. 리팩터링
테스트 케이스가 만들어진 후에 실제로 코드 작업을 한다.
코드를 추가할 때마다 설계와 테스트 케이스를 보고 테스트 케이스가 깨지지는 않는지 확인한다.
리팩터링 단계에서는 설계 의도와 테스트 케이스를 벗어나지 않는다면 어떤 방법을 적용해도 된다.
- 모듈을 분리한다.
- 함수와 클래스의 크기를 줄인다.
- 네이밍을 변경한다.
- 중복을 제거한다.
등...
중복을 없애라
중복은 추가 작업, 추가 위험, 불필요한 복잡도를 의미한다.
코드 중복을 제거하는 것은 물론 구현 부분에 있어 중복되는 부분도 리팩터링 하면 좋은 코드로 바뀔 수 있다.
중복을 제거하면 코드의 가독성이 올라가며, 시스템의 복잡도를 줄일 수 있다.
표현하라
나만 이해할 수 있는 코드를 짜는 것은 문제가 되지 않지만,
유지보수를 위해서 최대한 많은 사람이 이해하기 쉬운 코드를 짜는 것이 무조건 좋다.
코드를 명백하게 짤 수록 시스템 결함이 줄어들고, 유지보수 비용도 적게 든다.
- 좋은 이름
- 함수의 크기를 최대한 줄인다.
- 표준 명칭을 사용한다.
- 단위 테스트 케이스를 꼼꼼히 작성한다.
항상 코드를 작성하면서 다른 사람을 위해서 조금이라도 더 고민하고 코드를 작성하자
클래스와 메서드 수를 최소로 줄여라
가장 이상적인 방법은 클래스의 크기를 작게 유지하면서 그 숫자도 작게 유지하는 것이다.
히지만 이 우선순위가 다른 것보다 후순위가 되어야 한다. 클래스 수를 줄이는 것도 중요하지만 가장 우선시 되어야 하는 것은 앞에서 설명한 것들이다.
나의 결론
이번 장에서는 앞에서 설명했던 얘기를 종합하는 장이 아니었나 하는 생각이 들었다.
무엇보다 가장 기억에 남는 부분은
코드로 의도를 표현하는 것의 가장 중요한 방법은 상대방을 위해 조금이라도 더 읽기 쉬운 코드를 작성하려는 노력이다 라는 구절이다.
개인 프로젝트를 한 것들을 봐도 지금 와서 보면 이해하기 힘든 코드가 군데군데 보인다.
당시는 구현자체가 목표라 그냥 무작정 코드를 썼지만 이제는 상대를 위해서 코드를 작성할 줄 아는 개발자가되어겠다...
'Books' 카테고리의 다른 글
[GraphQL] 1장 GraphQL이란 (0) | 2022.06.02 |
---|---|
[Clean Code] #13 동시성 (0) | 2022.05.12 |
[Clean Code] #11 시스템 (0) | 2022.05.10 |
[Clean Code] #10 클래스 (0) | 2022.05.09 |
[Clean Code] #9 단위 테스트 (0) | 2022.05.08 |
- Total
- Today
- Yesterday
- error
- 상호평가
- Vuex
- GraphQL
- TypeScript
- bundler
- v-for
- webpack
- Transpiler
- Preloading
- 프로그래머스
- React
- reactrouter
- Vue
- 파이썬
- AxiosInterceptor
- redux
- js
- clean code
- React.memo
- 알고리즘
- redux-thunk
- SOAP API
- Vue.js
- Repository Pattern
- 백준
- python
- SPA
- 문제풀이
- programmers
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |