해당 글은 Robert C.Martin 클린 코드 라는 책을 읽고 학습한 내용을 정리 및 회고하는 글 입니다. 자세한 사항은 YES 24 클린 코드 - 애자일 소프트웨어 장인 정신 에서 확인해주세요.
클린 코드 - 애자일 소프트웨어 장인 정신 (Uncle Bob)
- 위키북스
- 지은이: Robert C.Martin (Uncle Bob)
- 옮긴이: 박재호, 이해영
이번 장에서 이야기하고자 하는 것
창발 (創發) 이라고 함은 하위 계층(구성 요소)에는 없는 특성이나 행동이 상위 계층(전체 구조)에서 자발적으로 돌연히 출현하는 현상이다.
이러한 창발성을 촉진하는 단순한 설계 규칙 4가지를 이번 장에서 설명하고 있다.
- 모든 테스트를 실행하라
- 중복을 없애라
- 프로그래머의 의도를 표현하라
- 클래스와 메서드 수를 최소로 하라
원칙 1. 모든 테스트를 실행하라
- 테스트가 가능한 시스템을 만들려고 하면 설계 품질이 더불어 높아진다.
- 테스트 케이스를 많이 작성할 수록 크기가 작고 목적 하나만을 수행하는 클래스가 나온다.
- 이러한 테스트 케이스를 만족시켰다면 이제는 리팩토링을 해도 좋다.
- 리팩토링은
- 응집도를 낮춘다
- 결합도를 낮춘다
- 관심사를 분리한다
- 등등
원칙 2. 중복을 없애라
- 중복을 없앤다면 SRP 에 대해서 더 쉽게 생각할 수 있다.
- 또한 적은 양이더라도 소규모 재사용은 시스템의 복잡성을 극적으로 줄여줄 수 있다.
- 이 때 Template Method 패턴을 이용할 수 있다
원칙 3. 프로그래머의 의도를 표현하라
코드는 개발자의 의도를 분명히 표현해야 한다. 개발자가 코드를 명백하게 짤수록 다른 사람이 그 코드를 이해하기 쉬워진다.
- SW 프로젝트의 대부분 비용은 장기적인 유지보수에 들어간다.
- 코드를 변경할 때 버그의 싹을 심지 않으려면 유지보수 개발자가 시스템을 제대로 이해해야 한다.
- 의도를 드러내는 방법에는 몇가지 규칙들이 있다.
- 좋은 이름을 선택한다
- 함수와 클래스 크기를 가능한 줄인다.
- 표준 명칭을 사용한다
- 단위 테스트 케이스를 꼼꼼하게 작성한다
원칙 4. 클래스와 메서드 수를 최소로 하라
- 목표는 함수와 클래스의 크기를 작게 유지하면서 동시에 시스템의 크기 또한 작게 하는 것이다.
- 하지만 이보다 TC 를 만들고 의도를 표현하는 작업이 더 중요하다
- 원칙과 정책을 너무 극단적으로 적용하는 것도 비효율을 불러일으킬 수 있다.
나의 해석과 회고
이번 장은 조금 반가운 장이었다.
이전에 클린 코드라는 책을 모르던 때에 사내의 Git Commit Message Log 에 이런 message 가 있었다.
Refactor : xxx 의 의도를 더 잘 드러냅니다.
처음 보았을 때 뭔가 개발적으로 좋은 말 같기는 하나 이해를 하지 못하였고 동료에게 물어보았던 기억이 있다.
그때 우리 팀의 동료이자 리더가 클린 코드를 읽으면 무엇인지 알 수 있을 것이다. 같이 클린 코드를 읽어보자
라고 했다.
드디어 의도를 드러낸다는 것이 내 눈앞에 보이는 챕터였기 때문에 다른 장보다 더 재밌게 읽었던것 같다
창발성의 설계 규칙 1번인 모든 테스트를 실행하라 에서 말하는 테스트가 가능한 시스템을 만들려고 하면 설계 품질이 더불어 높아진다.
에 매우 공감한다.
지난 10장 해석에서도 느꼈듯, 좋은 테스트를 가능한 효율적으로 빨리 하기 위해서는 클래스를 잘 만들고 잘 사용해야 한다.
잘 만들고 잘 사용한다? 클래스와 협력하는 것들이 적절한 매개로 협력을 하는지 봐야 한다는 것이다.
이런 생각들이 모여서 결국은 설계의 품질이 올라가지 않나 하는 생각이 든다.
'더 좋은 개발자 되기 > 개발자 책읽기' 카테고리의 다른 글
[개발자 책읽기] 클린 아키텍처-소프트웨어 구조와 설계의 원칙 (1장 설계와 아키텍처란?) (0) | 2022.04.10 |
---|---|
[개발자 책읽기] 클린 코드-애자일 소프트웨어 장인 정신 (14장-점진적인 개선) (0) | 2022.03.22 |
[개발자 책읽기] Java로 해석한 GoF 의 Design Pattern (생성 - 빌더 패턴) (0) | 2022.03.12 |
[개발자 책읽기] 클린 코드-애자일 소프트웨어 장인 정신 (11장 시스템) (0) | 2022.03.08 |
[개발자 책읽기] Java로 해석한 GoF 의 Design Pattern (생성 - 팩토리 메서드 패턴) (0) | 2022.03.07 |
댓글