읽기 좋은 코드를 도와줄 조언들
"추상과 구체를 넘나드는 것"
나무를 보는 눈과 숲을 보는 눈을 갖는 전문가스러운 초석을 만드는 과정
능동적 읽기
복잡하거나 엉망인 코드를 읽고 이해하려 할 때, 리팩토링 하면서 읽기
- 공백으로 단락 구분하기 
- 메서드와 객체로 추상화 해보기 
- 주석으로 이해한 내용 표기하며 읽기 
눈으로만 읽는 코드는 이해하는 데 어려움이 있기 때문에 충분히 코드를 갖고 놀면서 이해 해보는 것을 추천한다.
또한, 언제든 원래 코드로 돌아갈 수 있는 git reset --hard 가 있다. 얼마든 망가져도 우린 돌이킬 수 있다.
이 능동적 읽기의 핵심은 수단과 방법을 가리지 않고 도메인 지식을 늘리고 이전 작성자의 의도를 파악하는 것이다.
오버 엔지니어링 경계
필요한 적정 수준보다 더 높은 수준의 엔지니어링
- 예시 1 - 구현체가 하나인 인터페이스 
- 만약, 인터페이스 형태가 아키텍처 이해에 도움을 주거나 빠른 시일 내 구현체가 추가될 가능성이 있다면 납득 가능 -> 이 구조는 "스프링에서 자주 사용되는 Service - ServiceImpl" 과 비슷하다. 
- 위 예시는 구현체를 수정할 때 마다 인터페이스도 수정해야 하며, 코드 탐색에 대한 깊이가 깊기 때문에 영향을 주며 어플리케이션이 비대해진다. 
 
- 예시 2 - 너무 이른 추상화 
- 너무 과도하거나 너무 이르면 정보 자체가 숨겨지기 때문에 복잡도가 높아진다. 
- 후대 개발자들이 선대의 의도를 파악하기 어렵다. 
 
오버 엔지니어링을 경계하고 꼭 필요한 곳에 알맞게 사용해야한다.
은탄환은 없다
클린 코드도 은탄환이 아니다.
📌 실무의 입장은 2가지 사이의 줄다리기이다.
- 지속 가능한 소프트웨어의 품질(클린코드) vs 기술 부채를 안고 가는 빠른 결과물 - 대부분의 회사는 돈을 벌고 성장해야 하고, 시장에서 빠르게 살아남는 것이 목표 
 
이런 경우에도 클린코드를 추구하지 말라는 것이 아니라, 미래 시점에서 잘 고치도록 작성할 수 있는 코드 센스가 필요하다.
결국은, 클린 코드의 사고법을 기반으로 결정할 수 있는 것
- 확장 가능한 형태의 설계를 꾸준히 이어갈 수 있도록 TODO 작성하기 등 
📌 모든 기술과 방법론은 적정 기술의 범위 내에서 사용되어야 한다.
- 당장 급하게 배포가 필요한데, 동료에게 스타일 관련 리뷰를 주고 고치도록 강요한다면? 
- 이 사례는 클린 코드에만 입각해서 생각한 것 -> 회사의 입장에서는 의미가 없다. 
📌 도구라는 것은 일단 그 것을 한계까지 사용할 줄 아는 사람이 그 것을 사용하지 말아야 할 때도 아는 법
- 적정 수준을 알기 위해 때로는 극단적으로 시도해보자. 
- 오버 엔지니어링도 시도 해보고 몸으로 느끼며 적정 수준을 배우기 
항상 정답인 기술은 없고, 특정 기술과 방법론을 연습할 땐 한계 까지 다다른 후 적정 수준을 깨닫기
Last updated