본문 바로가기
더 좋은 개발자 되기/개발자 책읽기

[개발자 책읽기] 클린 코드-애자일 소프트웨어 장인 정신 (12장 창발성)

by Wonit 2022. 3. 14.

해당 글은 Robert C.Martin 클린 코드 라는 책을 읽고 학습한 내용을 정리 및 회고하는 글 입니다. 자세한 사항은 YES 24 클린 코드 - 애자일 소프트웨어 장인 정신 에서 확인해주세요.

 

클린 코드 - 애자일 소프트웨어 장인 정신 (Uncle Bob)

 

  • 위키북스
  • 지은이: Robert C.Martin (Uncle Bob)
  • 옮긴이: 박재호, 이해영

 

 


 

이번 장에서 이야기하고자 하는 것

 

창발 (創發) 이라고 함은 하위 계층(구성 요소)에는 없는 특성이나 행동이 상위 계층(전체 구조)에서 자발적으로 돌연히 출현하는 현상이다.

 

이러한 창발성을 촉진하는 단순한 설계 규칙 4가지를 이번 장에서 설명하고 있다.

 

  1. 모든 테스트를 실행하라
  2. 중복을 없애라
  3. 프로그래머의 의도를 표현하라
  4. 클래스와 메서드 수를 최소로 하라

 

원칙 1. 모든 테스트를 실행하라

 

  • 테스트가 가능한 시스템을 만들려고 하면 설계 품질이 더불어 높아진다.
  • 테스트 케이스를 많이 작성할 수록 크기가 작고 목적 하나만을 수행하는 클래스가 나온다.
    • 이러한 테스트 케이스를 만족시켰다면 이제는 리팩토링을 해도 좋다.
  • 리팩토링은
    • 응집도를 낮춘다
    • 결합도를 낮춘다
    • 관심사를 분리한다
    • 등등

 

원칙 2. 중복을 없애라

 

  • 중복을 없앤다면 SRP 에 대해서 더 쉽게 생각할 수 있다.
  • 또한 적은 양이더라도 소규모 재사용은 시스템의 복잡성을 극적으로 줄여줄 수 있다.
    • 이 때 Template Method 패턴을 이용할 수 있다

 

원칙 3. 프로그래머의 의도를 표현하라

 

코드는 개발자의 의도를 분명히 표현해야 한다. 개발자가 코드를 명백하게 짤수록 다른 사람이 그 코드를 이해하기 쉬워진다.

  • SW 프로젝트의 대부분 비용은 장기적인 유지보수에 들어간다.
  • 코드를 변경할 때 버그의 싹을 심지 않으려면 유지보수 개발자가 시스템을 제대로 이해해야 한다.
  • 의도를 드러내는 방법에는 몇가지 규칙들이 있다.
    1. 좋은 이름을 선택한다
    2. 함수와 클래스 크기를 가능한 줄인다.
    3. 표준 명칭을 사용한다
    4. 단위 테스트 케이스를 꼼꼼하게 작성한다

 

원칙 4. 클래스와 메서드 수를 최소로 하라

 

  • 목표는 함수와 클래스의 크기를 작게 유지하면서 동시에 시스템의 크기 또한 작게 하는 것이다.
  • 하지만 이보다 TC 를 만들고 의도를 표현하는 작업이 더 중요하다
    • 원칙과 정책을 너무 극단적으로 적용하는 것도 비효율을 불러일으킬 수 있다.

 

나의 해석과 회고

 

이번 장은 조금 반가운 장이었다.

 

이전에 클린 코드라는 책을 모르던 때에 사내의 Git Commit Message Log 에 이런 message 가 있었다.

 

Refactor : xxx 의 의도를 더 잘 드러냅니다.

 

처음 보았을 때 뭔가 개발적으로 좋은 말 같기는 하나 이해를 하지 못하였고 동료에게 물어보았던 기억이 있다.

 

그때 우리 팀의 동료이자 리더가 클린 코드를 읽으면 무엇인지 알 수 있을 것이다. 같이 클린 코드를 읽어보자 라고 했다.

 

드디어 의도를 드러낸다는 것이 내 눈앞에 보이는 챕터였기 때문에 다른 장보다 더 재밌게 읽었던것 같다

 

창발성의 설계 규칙 1번인 모든 테스트를 실행하라 에서 말하는 테스트가 가능한 시스템을 만들려고 하면 설계 품질이 더불어 높아진다. 에 매우 공감한다.

 

지난 10장 해석에서도 느꼈듯, 좋은 테스트를 가능한 효율적으로 빨리 하기 위해서는 클래스를 잘 만들고 잘 사용해야 한다.

 

잘 만들고 잘 사용한다? 클래스와 협력하는 것들이 적절한 매개로 협력을 하는지 봐야 한다는 것이다.

 

이런 생각들이 모여서 결국은 설계의 품질이 올라가지 않나 하는 생각이 든다.

 

댓글0