깨끗한 코드를 작성하기 위한 열두번째 기록
창발적
하위계층(구성 요소)에는 없는 특성이나 행동이 상위계층(전체 구조)에서 자발적으로 돌연히 출현하는 현상을 창발성 [동아사이언스 기사 참조]
창발적 설계로 깔끔한 코드를 구현하자
1) 우수한 설계, 2) 쉬운 코드 구조와 설계 파악, 3) 쉬운 SRP, DIP 적용, 4) 우수한 설계의 창발성 촉진을 위해 4가지 규칙만 따르면 된다고 말합니다. 아래에서 4가지 규칙을 중요도 순으로 소개해드리겠습니다.
- 모든 테스트를 실행합니다.
- 중복을 없앱니다.
- 프로그래머 의도를 표현합니다.
- 클래스와 메서드 수를 최소로 줄입니다.
모든 테스트를 실행합니다.
검증을 위해서는 모든 테스트를 통과해야 합니다. 그렇기 때문에 테스트가 가능한 시스템을 만드는 것은 중요합니다. 검증이 불가능한 시스템은 절대 출시하면 안되기 때문입니다.
테스트가 가능한 시스템을 만들기 위해 노력하면 설계 품질이 높아지고, 크기가 작고 목적 하나만 수행하는 클래스가 생성됩니다. 그렇기 때문에 SRP를 준수하는 클래스가 생성되게 됩니다.
또한 결합도가 높으면 테스트 케이스를 작성하기 어렵기 때문에 의존성 주입, 인터페이스 사용, 추상화 등과 같은 도구를 사용해 결합도를 낮춥니다.
테스트 케이스를 만들고 실행하는 것 만으로 시스템은 낮은 결합도와 높은 응집력, 그리고 객체 지향 방법론이 지향하는 목표를 저절로 달성하게 되어 설계 품질이 높아집니다.
리팩터링을 합니다. [중복 제거, 의도 표현, 클래스 & 메서드 수 최소]
리팩터링 단계에서는 코드를 수정하고, 테스트를 통해 기존 기능을 깨뜨리지 않는지 확인합니다. 코드를 정리하면서도 테스트 케이스가 있기 때문에 시스템이 깨질까 걱정할 필요가 없습니다.
소프트웨어 설계 품질을 높이기 위해 응집도를 높이고, 결합도를 낮추고, 관심사를 분리하고, 시스템 관심사를 모듈로 나누고, 함수와 클래스 크기를 줄이고, 더 나은 이름을 선택하는 등 다양한 기법을 동원합니다.
의도 표현
나 자신은 개발을 직접 했기 때문에 코드를 구석구석 이해할 수 있습니다. 하지만 다른 사람은 문제에 대해 깊이 이해할 가능성이 낮습니다. 그렇기 때문에 유지보수 하는 사람을 위해 개발자의 의도를 분명히 표현해야 합니다.
- 좋은 이름을 선택합니다.
- 함수와 클래스 크기를 가능한 줄입니다.
- 표준 명칭을 사용합니다.
- 단위 테스트 케이스를 꼼꼼히 작성합니다.
마무리
오늘은 창발성이라는 생소한 단어로 시작을 했습니다.
테스트를 실행하는 것 하나로 얼마나 많은 이점이 있는지 알게되었습니다. 또한
리팩터링을 하는 것 만으로 많은 이점이 있다는 것을 알게되었습니다.
작은 것을 위해 노력하는 일을 통해 더 큰 것을 얻을 수 있다는 것을 알게되었습니다.
저도 깨끗한 코드를 위해 하나씩 배워가면서 실천하여
추후에는 많은 이점이 녹아들어 있는 개발자가 되기 위해 노력하겠습니다.
포스팅 읽어주셔서 감사합니다.
[출처]
Clean Code (클린 코드,애자일 소프트웨어 장인 정신), 로버트 C. 마틴 저
'Book Record > Clean Code' 카테고리의 다른 글
[Clean Code] 13장 동시성(2) (2) | 2022.12.04 |
---|---|
[Clean Code] 13장 동시성(1) (4) | 2022.11.29 |
[Clean Code] 11장 시스템 (2) | 2022.11.19 |
[Clean Code] 10장 클래스 (0) | 2022.11.06 |
[Clean Code] 9장 단위 테스트 (2) | 2022.10.24 |