테크레시피

구글 “성급하게 DRY 원칙 적용하자 말라”

구글에서 코드를 읽기 쉽고 유지보수하기 쉬운 형태로 만드는 작업을 하는 그룹인 코드 헬스(Code Health)가 성급하게 DRY를 적용하지 말라는 글을 공개했다.

DRY는 “Don’t Repeat Yourself” 약자로 코드를 중복하지 않는 것을 중시하는 개념. 중복된 코드가 존재하면 특정 기능을 바꾸려 할 때 같은 기능을 가진 부분을 모두 찾아 동시에 변경해야 하므로 누락이나 실수가 발생할 위험이 높아진다. 반면 코드 중복을 막으면 한 곳만 바꾸면 된다. DRY를 엄격히 적용하면 코드 유지보수성이 향상될 것 같지만 구글 코드헬스 그룹은 블로그에서 DRY 원칙을 지나치게 엄격히 적용하면 시기상조로 추상화가 이뤄져 향후 변경할 때 불필요하게 복잡해진다며 성급한 DRY 적용을 피해야 한다고 설명했다.

예를 들어 이미지 속 왼쪽 코드는 DRY에 따라 기한 판정을 한 함수로 모은 것이고, 오른쪽 코드는 DRY에 반해 두 곳으로 나뉘어 있다. ValueError 체크 내용이 동일해 현재로서는 DRY를 적용할 수 있지만 코드헬스 그룹은 태스크와 지불 기한은 서로 다른 개념이며 체크 내용이 우연히 같을 뿐이라며 DRY를 적용하면 안 된다고 설명하고 있다.

실제로 지불 관련 추가 검증이 필요해지면 오른쪽 코드는 쉽게 검증을 추가할 수 있지만 왼쪽 코드에 지불 추가 검증을 도입하기는 매우 어렵다. 코드가 실제로 중복된 것인지 아니면 겉보기에만 비슷한지 신중히 고려할 필요가 있다고 말했다.

코드 요구사항은 시간이 지날수록 자주 변하므로 초기 단계나 소규모 개발에서는 다소 중복을 허용하고 충분한 공통 패턴이 드러난 후에야 DRY를 적용해 추상화를 시작하는 게 개발을 쉽게 진행할 수 있다고 한다. 관련 내용은 이곳에서 확인할 수 있다.

추천기사