👣 리팩토링을 대하는 자세와 단위 테스트를 대하는 자세
🎯 코드의 의도를 명확하게 표현하기
코드를 작성할 때 가장 중요한 요소중 하나는 “코드가 무엇을 하는지”명확하게 나타내는 것.
코드 자체가 설명적이여야 하며, 주석에 의존하지 않아야 한다
코드는 변한다. 즉 소프트웨어는 발전하며 코드는 동적이지만 주석은 변하지 않는다.
좋은 네이밍은 코드의 가독성을 높이며 함축적인 의미를 담는 것이 중요하다.
그렇다고 해서 너무 함추적인 의미를 담거나 줄임말은 피해야 한다.
함수와 변수를 의미 있는 이름으로 정의하면 코드를 읽는 입장에서도 쉽게 이해할 수 있다.
한개의 함수는 한가지 책임만 가져야 하며, 여러가지 기능을 포함하지 않도록 해야한다.
🎯 비즈니스 로직이 자연스럽게 녹아있는가?
비즈니스 로직은 도메인의 개념을 반영해야 한다
현재 내 프로젝트의 요구사항 및 도메인 개념이 들어가 있어야 한다.
도메인 용어를 코드에서 그대로 활용하는 것이 가독성 향상에 도움이 된다.
🎯 변수와 메서드의 배치는 읽는 흐름을 고려
관련된 변수와 메서드는 가까운 곳에 배치하는 것이 좋다.
상위 개념에서 하위 개념으로 자연스럽게 흐르도록 정리해야 한다.
공개메서드의 배치도 중요도롤 따라서 정리한다 → 객체의 상태를 변경하는 메서드는 상위에, 그 다음 판별 메서드 그 다음 조회 메서드 순으로 중요도를 나눠 배치하자.
비공개 메서드는 공개메서드의 언급된 순서대로 배치하고, 공통으로 사용하는 메서드라면 하단에 두자.
🎯 테스트 하기 쉬운 영역과 어려운 영역 나누기
순수 함수 중심으로 설계하고, 테스트가 어려운 영역은 Mocking 활용하기
테스트 하기 쉬운 영역구분하기
순수함수(특정 입력이 특정 출력을 내는 경우)
외부 의존성이 없는 메서드
테스트 하기 어려운 영역
DB 네트워크, 파일 입춥력 등 외부 시스템을 사용하는 코드
static 또는 private 메서드
환경 변수에 의존하는 코드
외부 시스템을 사용하는 코드의 단위테스트는 Mock → 가짜 객체를 이용하여 의존성을 주입받고 테스트를 진행할 수 있다.
📚 회고
리팩토링은 필수가 아니라 “습관"이다.
리팩토링은 “나중에 하는 것이 아니라, 항상 개선할 수 있는 습관” 으로 가져가야 한다.
코드가 동작한다고 해서 “좋은 코드”가 아니다. 더 읽기 쉬운 코드 , 유지보수 하기 쉬운 코드가 되어야 한다.
리팩토링에 있어서의 개발자의 태도
“이 정도면 되겠지?”에서 멈추는 것이 아닌 “이 코드가 우리 프로젝트의 도메인 개념을 잘 설명하고, 가장 직관적인가?”를 고민하자
리팩토링은 가독성을 최우선으로 둔다
가독성이 높은 코드는 유지보수가 쉽고, 버그를 줄일 수 있다
리팩토링을 할 때는 테스트가 필수이다
단위 테스트 없이 리팩토링하면 코드가 망가졌는지 확인할 방법이 없다.
그리고 무섭다. 단위 테스트 코드 없이 리팩토링 하는 것 자체가 무섭다.
단위 테스트가 없는 코드를 리팩토링한다면 그 전에 먼저 테스트를 작성하자.
리팩토링을 할 때는 단계적으로 진행하자
변경할 때마다 단위 테스트를 실행하여 문제가 없는지 확인해야 한다.
단위 테스트는 개발자로서 “코드 품질을 지키는 무기”다.
단위 테스트는 단순한 체크리스트가 아니라 개발자가 “코드를 망가뜨리지 않도록 보호”하는 방패라고 생각하고 작성하자
단위 테스트가 잘 갖춰진 프로젝트는 리팩토링이 자유롭다.
실제로 나는 TDD보다 기능을 먼저 개발한 뒤 해당 기능이 내가 예상한대로 잘 작동하는지 안하는지 테스트 코드를 작성하는데, 다양한 케이스를 보호하는 테스트 코드를 작성하지 못하더라도, 허접한 테스트 코드라도 있는것이 낫다고 생각한다. 그 허접한 테스트 코드가 나를 살려줄 때도 많이 있었기 때문…
그리고 오히려 테스트 코드가 없다면 디버깅에 더 많은 시간이 소요된다. BDD 스타일로 시나리오를 확인한뒤 테스트 코드를 보면서 데이터의 흐름을 유추할 수 있다.
🗣 개발자의 마음가짐
✅ 테스트는 문서다.
테스트는 코드의 사용법을 가장 정확하게 설명한다.
테스트는 코드의 동작을 명확하게 문서화한다.
어떤 상황에서 어떻게 동작한다와 같은 동작을 명확하게 녹여낸다.
테스트는 코드의 유지보수를 돕는 최신 문서다.
✅ 리팩토링을 대하는 자세
리팩토링은 코드 품질을 높이는 습관이다.
코드의 가독성을 최우선으로 둔다.
테스트 없이 리팩토링하지 않는다.
과한 추상화를 피하고 실용적인 접근을 한다.
✅ 단위 테스트를 대하는 자세
단위 테스트는 “개발자의 무기”다.
실패하는 테스트를 통해 버그를 예방한다.
Happy Case + 예외 Case를 모두 테스트한다.
테스트가 어려운 경우, Mocking을 활용한다.
댓글을 작성해보세요.