클린코드를 작성하면 가독성, 유지보수, 확장성이 좋아집니다.
클린코드를 작성하기 위한 원리는 무엇이고 가장 좋은 방법은 무엇일까요? 클린코드를 작성하기 위해 도움이 될만한 팁들을 모아봤습니다.
- 의미가 있고 기능을 설명할 수 있는 변수, 함수 및 클래스 이름을 사용합니다.
- 함수는 작게 한가지 목적을 수행해야 합니다.
- 일관된 들여쓰기 및 코딩 스타일을 따릅니다.
- 매직넘버를 피합니다.
- 값들을 하드 코딩하지 않습니다 상수변수를 대신 사용합니다.
- 코드의 목적을 설명하기 위해 주석을 쓰되 주석을 중복하여 작성하지 마세요.
- 오류 처리 및 예외 처리를 해서 예상치 못한 상황에 대처해야 합니다.
- 코드 중복을 피하고, 반복되는 로직은 함수 또는 클래스로 추출(extract)하여 재사용합니다.
- 테스트 코드를 작성합니다. 이를 통해 코드의 기능을 검증합니다. (코드를 손상시키지 않도록 합니다.)
- 코드는 단순하고 간결하게 작성하고 불필요하게 복잡한 솔루션을 피해야 합니다.
- 정기적으로 리팩터링해서 중복코드나 데드 코드를 제거하고 코드를 계속 개선해야 합니다.
- 적절한 자료구조를 사용해서 데이터를 저장하고 효율적으로 사용합니다.
- 함수와 클래스의 코드는 길어지지 않게 유지합니다. 만약 100줄 이상 넘어간다면 더 작게 쪼갤 수 있는지 고려하세요.
- 설계 패턴을 사용하여 표준적이고 재사용성이 높은 방법으로 코딩을 합니다.
- 코드 구성 요소들이 긴밀하게 결합되지 않게 하세요. 느슨한 결합, 높은 응집력을 추구합니다.
- 코드의 제어 흐름을 쉽게 추적할 수 있어야 합니다.
- 최소 권한 원칙(principle of least privilege)을 사용합니다. 객체와 함수등은 작업을 수행하는데 필요한 정보와 권한만 부여합니다.
- 다른 개발자에게 코드 리뷰를 받습니다. 코드를 검토하고 피드백을 받으면 문제를 인지하고 수정할 수 있습니다.
- 관련된 함수들이나 클래스들을 함께 그루핑하여 코드를 정리해서 쉽게 탐색할 수 있게 합니다.
- 중복 작업을 피하고 알고리즘을 개선하여 성능향상을 염두합니다.
- 다른 개발자들이 코드의 기능과 사용방법을 쉽게 이해할 수 있도록 코드를 문서화 합니다.
- DRY(Don't Repeat Yourself) 원칙을 사용합니다.
- 전역변수 사용을 피합니다. 가능한 한 지역변수를 사용하도록 노력합니다.
- lint 기능이 있는 도구(예-esLint)를 사용하여 코딩 스타일을 강제하고 잠재적인 에러를 방어합니다.
- 암시적인 타입 변환이 일어나지 않게 합니다. 타입변환을 명시적으로 나타내는 코딩을 합니다.
- 함수의 매개변수에 의미있는 default 값을 사용합니다. 이를 통해 에러를 방어하고 코드가 유연성이 생깁니다.
- 상속(inheritance), 다형성(polymorphism), 캡슐화(encapsulation)과 같은 객체지향적인 프로그래밍 기술을 사용합니다.
- 불변성(immutability), 고차함수(higher-order functions) 과 같은 함수형 프로그래밍 기술을 사용합니다.
- 적절한 에러 메시지를 로깅하여 코드 문제를 진단합니다.
- 모듈화를 통해 코드를 작고 의미 있는 컴포넌트들로 쪼갭니다.
- anti pattern 들을 공부하고 사용하지 않도록 합니다.
- SOLID, KISS, YAGNI 등 디자인 원리를 공부하고 적용합니다.
- 하드 코딩된 값을 사용하지 않도록 하고 대신 configuration 파일 또는 환경 변수를 사용하여 configuration 정보를 저장합니다.
- 유닛 테스트, 통합테스트 , E2E 테스트 와 같은 적절한 테스트 전략을 사용합니다.
- 코드를 읽고 이해하기 어렵게만들 수 있는 약어와 단축어를 사용하지 않습니다.
- 문서 문자열, 인라인 주석과 같은 코드 문서도구를 사용해서 컨텍스트를 제공하고 코드를 설명합니다.
- 코드 프로파일링 및 성능 최적화 도구를 사용해서 코드의 성능 병목 현상을 식별하고 해결합니다.
- 딥 네스팅 및 복잡한 제어구조를 사용하지 않습니다.
- 수동 코딩을 줄입니다. 자동완성을 최대한 활용하세요
- 세션 및 쿠키와 같은 상태 저장 구성요소는 필요한 경우가 아니면 사용을 지양합니다.
- 함수가 여러 반환 문을 사용하지 않도록 하고 여러 값을 포함할 수 있는 객체를 반환합니다.
- 자동 테스트 도구를 사용해서 테스트 및 배포를 자동화 합니다.
- 파일 경로를 하드코딩 하지 않고, 상대 파일 경로 및 환경 변수를 사용해서 파일 위치를 지정합니다.