FE

[Clean Code] React에서의 클린코드

mandelina 2023. 10. 10. 00:33

클린 코드의 의의 

- 실무에서 공공연한 지뢰코드가 존재한다.

- 지뢰코드 === 흐름파악이 어렵고, 도메인 맥락 표현X , 동료에게 물어봐야하는 코드

- 즉 실무에서 클린코드란 유지보수 시간의 단축과 같다.

 

( 클린코드 != 짧은코드 )

== 원하는 로직을 빠르게 찾을 수 있는 코드

 

원하는 로직을 빠르게 찾으려면?

1. 하나의 목적을 가진 코드가 흩뿌려져 있다면 => 1.응집도를 높여라 

2. 함수가 여러 가지 일을 하고 있다면? => 2.단일책임의 원칙을 따라라

3. 함수의 세부구현 단계가 제각각이라면? => 3.추상화 단계를 조정해 핵심 개념을 필요한 만큼 노출해라

 


1. 응집도

 

응집도가 낮은 코드 예제

하나의 기능의 코드가 여기저기 흩뿌려져있다.

 

리팩토링 시도 - custom Hook 사용

 

- custom hook을 이용하여 한번에 뭉쳤을때의 위험성 

=> 팝업에서 버튼을 눌렀을때 어떤 액션을 하는지가 중요한 부분이지만 hook속에 가려져 알 수 없다.

=> anti Pattern 이 될 수 있다. (훅 속에 가려져서 기능을 제대로 알 수 없다. )

 

Q. 그럼 무엇을 뭉치고, 뭉치지 않아야할까 ?

- 뭉치면 쾌적한 부분 : 당장 몰라도 되는 디테일 정보

- 뭉치면 답답한 부분 : 코드 파악에 필수적인 핵심정보

 

클린코드찾고싶은 코드를 빠르게 찾을 수 있는 코드이다!

 

 

따라서 이를 바탕으로 리팩토링한 코드

 

세부구현만 숨기고 , 핵심데이터인 팝업 title, contents, action은 바깥에서 넘긴다.

 

이렇게 핵심 데이터만 전달받고 세부 구현은 뭉쳐 두는 개발스타일을 선언적 프로그래밍이라고 한다.

 

👍 선언적 프로그래밍을 이용하자!

- 무엇을 해야할지만 알려주고, 세부 구현은 안쪽에 뭉쳐두는 방법

- '무엇' 만을 바꿔서 사용 가능

 

Q. 그럼 선언적 프로그래밍이 명령형 프로그래밍보다 좋은것인가? 

- No 

- prop으로 '어떻게 해야하는지'를 세부적으로 넘겨야 하는 경우에는 명령형 설계도 필요

 

 

 

2. 단일 책임

문제 코드

약관동의여부를 체크하고 질문을 제출하는 함수

  함수 내용에는 "약관체크"와 "질문제출"이 섞여있다. 

👉 중요한 포인트가 모두 담겨있지 않는 함수명은 위험하다. 

 

 

리팩토링한 코드

하나의 함수가 하나의 일을 하도록 만들고, 명확한 함수명을 작성해주었다.

 

 

기존 onClick함수에 log를 찍는 함수와 API 콜이 섞여있는 부분을 개선

 

 

도메인이 복잡하면 한글 함수명을 사용

 

정리

한가지 일만 하는 함수를 따로따로 작성 , 명확한 함수 이름 작성

- 도메인이 복잡하여 영어 이름을 길게 짓는게 오히려 복잡도를 높힌다면 한글이름을 사용하자.

 

3. 추상화

- 로직에서 핵심 개념을 뽑아내기

 

 

plannerId에 따라 다른 label값을 보여주는 코드

- 상황에 따라 필요한 만큼 추상화를 하면 된다.

 

추상화를 할 때 주의해야할 점

 

추상화 수준이 섞여있다면 코드 파악이 어렵다.
추상화 단계를 비슷하게 정리하는것이 좋다.

 


 

클린코드 적용하기

 

1. 담대하게 기존 코드 수정하기

 - file changes를 두려워 하지 말자

 

2. 큰 그림을 보는 연습하기

- 그 때는 맞아도 지금은 틀릴수 있다.

- 기능추가 자체는 클린해도 전체적으로 어지러울 수 있다.

 

3. 팀과 함께 공감대 형성하기

- 코드에 정답은 없다. 팀과 함께 코드리뷰를 통해 개선하기

 

4. 문서로 정리하기

- 향후 어떤점에서 위험할 수 있는지

- 어떻게 개선할 수 있는지

 

 


 

요즘들어 코드를 짤 때 어떻게 짜야 좋은 코드인지 고민을 많이 했는데 좋은 인사이트가 된 것같다.

이론적으로는 알고 있던 내용들이였는데 실무 예제를 통해 보니 확실히 더 와닿았다.

특히 , 응집도와 관련되어서 나는 응집도가 정말 낮은 코드를 짜고있었구나 반성하게 되었고 ^^..

추상화를 할 때 추상화 수준까지 맞춰주는 부분을 보며 깔끔함에 감탄했다. 

정리한 내용을 참고해서 조금 더 깔끔하게 짜봐야징! 

 

 

출처 : https://www.youtube.com/watch?v=edWbHp_k_9Y&ab_channel=%ED%86%A0%EC%8A%A4