개인 노트 정리) 프론트엔드 개발자가 알아야하는 CS 지식 - 코드 리팩토링, 클린 코드
프론트엔드 웹 개발의 모든 것 초격차 패키지 Online.
프론트엔드 개발자가 알아야하는 CS 지식
소프트웨어 공학
# 코드 리팩토링
- 외부적으로 드러나는 기능을 변경하지 않는다 결과의 변경 없이 코드를 조정.
- 소스 코드의 가독성과 유지 보수의 용이성을 높이기 위해 내부 구조를 변경한다.
→ 기존 기능은 유지하되 개발 과정에서 편리한 코드가 되도록 재작성하는 것이다.
→ 새로운 기능을 추가하거나, 버그를 제거하기 위한 목적은 아니다.
## 리팩토링의 필요성
- 대규모 프로젝트를 진행하기 위해 유지보수의 용이성이 요구된다.
→ 소프트웨어의 구조, 구현, 설계를 개선(깔끔하고 단순하고 표현력이 풍부한 코드)하면서 기능을
보존한다.
- 소스 코드의 가독성이 떨어지는 경우, 다른 사람(혹은 미래의 나)과의 협업이 어려울 수 있다.
- 리팩토링을 통해 코드의 중복을 제거하고, 수정이 편리해질 수 있다.
→ 코드의 품질이 좋아 수정하기 용이하다면, 궁극적으로는 개발 속도가 개선된다.
## 리팩토링을 해야 할 때
- 유사한 코드가 세 번 이상 반복될 때, 리팩토링을 고려하자.
→ 이 경우에도 무조건적인 리팩토링이 아닌, 개발 일정 및 계획을 감안해야 한다.
- 코드 리뷰를 통해 다른 사람에게 코드를 공유할 때, 리팩토링을 고려하자.
→ 코드 리뷰를 통해 코드의 질을 높일 수 있지만, 너무 많은 인원이 참여하지 않는 것을 권장한다.
- 새로운 기능을 추가할 때 리팩토링을 고려하자.
→ 현재 코드를 유지한 상태로 새 기능을 추가하는 게 어렵다면, 리팩토링을 고려해 보자.
- 버그를 수정해야 할 때 리팩토링을 고려하자.
## 리팩토링을 하지 말아야 할 때
- 현재의 코드가 정상 동작조차 하지 않는 상태라면, 리팩토링보다는 재작성이 필요하다.
- 개발 일정 마감이 다가 온 상황에서는 가급적 리팩토링을 피한다.
## 리팩토링의 과정
- 기능을 유지하면서, 소스코드의 내부 구조를 변경한다.

## 리팩토링(Refactoring) : Two Hats
- Two Hats 원칙을 지키면서 리팩토링을 진행하는 것이 권장된다.
1. 기능을 추가할 때 : 기존 코드를 수정하지 말고, 기능 및 테스트만 추가한다.
2. 리팩토링 할 때 : 기능을 추가하지 말고, 기존 동작을 유지한 상태로 내부 구조만 변경한다.
→ 추가 오류를 최소화하기 위하여, 리팩토링에만 집중할 수 있도록 한다.
## 클린 코드와 리팩토링
- 코드 리팩토링은 클린 코드를 포함한 전반적인 유지 보수의 용이성을 목표로 한다.
→ 따라서 클린 코드의 기능을 리팩토링이 포함한다.
- 클린 코드는 기본적인 코드 작성 과정에서부터 잘 이루어지는 것이 좋다.
# 클린 코드 (Clean Code)
- 소프트웨어가 모든 테스트를 통과하고, 정상 동작한다고 좋은 코드 일까?
- 클린 코드란, 말 그대로 개발자가 보기에 깔끔한 코드를 의미한다.
→ 개발자가 보았을 때, 이해하기 쉬운 코드가 클린 코드다.
- 단적인 예시로, 모든 변수 이름을 a , b , c 와 같은 방식으로 지은 경우를 생각해 보자.
## 개발 과정에서 겪을 수 있는 어려운 점
- 퇴사할 사람이 작업하던 코드를 이어 받아 작업해야 하는 상황을 가정해 보자.
- 기존 코드를 이해하는 데에 20시간이 걸리고, 정작 수정 시간은 1시간일 수도 있다.
- 더불어 수정 작업으로 인해 새로운오류가 다발로 쏟아질 수 있다.