티스토리 뷰
코드에서 나는 악취
이번에도 세부적인 내용은 적지 않겠다. 그 중에서도 중요하다고 생각한 몇가지만 적어보겠다. 그리고 가장 중요한 것은 코드를 작성할 때 생각을 하면서 짜는 것이다. 생각없이 코드를 적으면 악취를 풍긴다. 최대한 냄새를 풍기지 않게 주의하면서 코딩을 하자.
기이한 이름
- 코드를 명료하게 표현하는데 표현하는데 가장 중요한 요소 하나는 바로
이름
이다. - 마땅한 이름이 떠오르지 않는다면 설게에 더 근본적인 문제가 숨어 있을 가능성이 높다.
- (너무 많은 역할을 하고 있지는 않은지 생각해보자)
네이밍은 엄청나게 중요하다. 진짜로 엄청엄청. 변수명을 보고 유추하기 어렵다면 그건 잘못된 네이밍이다. 설계가 잘못되었는지 두 가지 이상의 역할을 하고 있는지 이런것들을 생각하는 것도 중요하지만 그것과는 별개로 복잡한 함수도 존재한다. 나름대로 신경써서 네이밍을 지을려고 노력하지만 쉽지 않다. 그리고 이건 나만하는 고민이 아니다. 어디에서나 잘못된 네이밍으로 많은 문제가 발생한다.
그래서 이걸 해결하기 위해서는 어떤 노력을 해야할까?? 네이밍을 의식적으로 신경쓰는건 당연한거고 코드리뷰에서 잡아주는 것도 당연히 해야할일이다. 그런 것들을 제외하고 근몬적인 네이밍 실력을 늘리는 방법이 필요하다. 내 생각에 가장 좋은 방법은 유명 라이브러리 코드를 까보는 것이다. 컴포넌트의 인터페이스 네이밍을 고려할때도 외부 라이브러리를 참조하면 도움이 되는데 함수라던가 변수도 비슷할 것 같다. 그리고 내가 생각하는 또 한가지 방법은 한글 변수명이다. 요즘 영어를 잘하는 사람이 정말 많고 국내 기업이지만 외국인이 들어오는 경우도 많이 있다. 하지만 우리 대부분은 한국인이고 영어를 네이티브만큼 하지 못한다. 무분별한 한글 사용이 아니라 필요한 경우만 한글 네이밍을 사용한다면 좀 더 명확하게 이름을 지을 수 있다. 실제로 많은 회사에서도 도입하고 있다. 하지만 아직까지는 고정관념도 있고 코딩하는데 한글을 사용한다는게 꺼림칙하다는게 일반적인 의견인 것 같다.
https://tosspayments-dev.oopy.io/chapters/frontend/posts/hangul-coding-convention
https://community.rememberapp.co.kr/post/72702
중복 코드
중복을 제거하자. 중복제거, 모듈화 같은 내용은 어느 책을 봐도 나오는 내용이다. 진짜 기본이지만 잘 지켜지지 않는 것이기도 하다. 아니 같은 로직 생기면 함수나 클래스 만들어서 빼면 끝인데 이게 왜?? 라고 생각할 수도 있지만 조금씩 구현내용이 다르다면 어떨까? 코드스피츠 강사님은 개발자의 능력에 따라 중복을 보는 눈이 다르고 했다. 그렇기 때문에 리팩터링책도보고 강의도 듣고 개인적으로 공부도 하고있다.
긴 함수
함수가 길면 코드를 이해하기가 너무 힘들다. 그래서 좋은 네이밍으로 된 짧은 함수를 만들어야한다. 네이밍을 잘 지어놓고 함수를 쪼개놓으면 세부적인 구현 코드를 보지 않아도 된다. 그리고 이걸 선언형 프로그래밍이라고 한다. 요즘 프론트엔드에서 선언적 프로그래밍이 강조되는데 이걸 하기 위해서 가장 중요한건 이런 기본기다. 또 한가지 중요한 것이 있다. 주석으로 달만한 부분은 함수로 만들어야한다. 그건 함수의 길이가 한줄이라도 예외가 되지는 않는다. 옛날에 노마드코더(니콜라스)님 강의를 들을때 함수를 너무 잘게 나누길래 왜 저렇게 하지?? 라면서 합쳤었다. 그리고 지금은 그 이유를 알게 되었다. 함수가 길다고 나누는게 아니다. 중요한건 함수의 목적(의도)과 구현 코드의 괴리가 얼마나 큰가다.
주석
기본적으로 주석은 악취를 향기로 바꿔준다. 예를들자면 안씻고 향수를 뿌린 경우다. 향기로 바꾸지만 주석이 과해지면 악취를 풍긴다. 즉 주석을 사용하기 전에 함수를 추출한다던가 함수 선언 바꾸기라던가 이런 리팩터링을 먼저 적용하자. 그리고 나서도 주석을 적어야 한다면 그 때 주석을 적어주자. 또한 리팩터링을 하기 부담스러운 코드라면 주석으로 설명이라도 추가해주자.
주석을 남겨야겠다는 생각이 들면, 가장 먼저 주석이 필요 없는 코드로 리팩터링해본다.
https://github.com/yoonminsang/refactoring-2/blob/main/yoonminsang-robin/3/README.md\
'책 > 리팩터링2' 카테고리의 다른 글
리팩터링2 4장 리뷰 (0) | 2022.09.25 |
---|---|
리팩터링2 2장 리뷰 (0) | 2022.09.08 |
리팩터링2 1장 리뷰 (0) | 2022.08.01 |