마틴 파울러 "컴퓨터가 이해할 수 있는 코드는 바보라도 작성할 수 있다. 좋은 프로그래머는 사람이 이해할 수 있는 코드를 작성한다."
나쁜 코드가 쌓일수록 팀 생산성이 점점 떨어진다.
재설계로 들어간 거대한 비용이 레거시를 운영하는 것 보다 더 비용이 절감된다.
💡 레거시
과거에 개발되었으나 현재까지 사용되고 있는 코드나 시스템
독립성 : 다른 모듈이나 라이브러리에 대한 의존성이 낮아야 한다. 이렇게 하면 코드를 변경할 때 다른 부분에 영향을 덜 미치고 오류가 발생할 가능성이 줄어든다.모듈화 : 코드를 작은 모듈 또는 컴포넌트로 분할하고, 각 모듈은 자체적인 역할과 책임을 가져야 한다. 이렇게 하면 코드의 유지보수와 테스트가 쉬워지며, 코드를 재사용하기도 편리해진다.외부 의존성 관리 : 외부 라이브러리, 서비스 또는 데이터베이스와의 의존성을 관리할 때 주의해야 한다. 이러한 의존성은 변경될 수 있으므로 코드 내에서 이러한 의존성을 추상화하고, 변경에 유연하게 대처할 수 있는 방법을 고려해야 한다.💡 의존성의 추상화
의존성을 추상화하는 것은 코드에서 다른 부분에 어떻게 연결되는지를 감추는 것!
이렇게 하면 코드를 더 유연하게 만들어서 변경이 필요할 때 더 쉽게 대처할 수 있고, 코드를 테스트하고 이해하기가 더 쉬워진다.간단한 예를 들어보면, 만약 소프트웨어에서 데이터베이스를 사용한다면, 데이터베이스와의 연결을 코드 한 곳에 넣어두고, 다른 부분은 그 연결을 직접 다루지 않고 추상적으로 사용한다. 이렇게 하면 나중에 데이터베이스를 바꿔야 할 때 연결 부분만 바꾸면 되고, 다른 부분은 건드리지 않아도 되니까 편하다.
각 클래스나 함수는 하나의 단일 책임만 가져야 합니다. 이를 통해 클래스나 함수가 수정되어야 할 이유가 단 하나라는 것을 보장하며, 코드의 모듈화를 촉진합니다.
클린한 코드는 테스트하기 쉬워야 한다. 모듈이나 함수는 독립적으로 테스트 가능해야 하며, 자동화된 단위 테스트가 가능해야 한다.