많은 책에서 코드 중복이 나쁘다는 말이 나온다. 이 글에서 코드 중복이 발생시키는 문제들을 정리해 보도록 하겠다.


완벽하게 논리적인 사고로 만들어진 버그

중복 코드가 있을 경우, 개발자가 완벽하게 논리적인 사고를 한다고 해도 버그가 발생하게 된다. 이 문제를 첫번째로 놓은 이유는 그만큼 이 문제가 심각한 영향을 미치기 때문이다. 개발자의 능력이 아무리 뛰어나고 논리적 사고를 잘 한다고 해도 중복 코드가 있으면 비 논리적인 코드를 만들어 내게 된다.

아래 코드를 보자.

public void function1(){

    task1();

}

public void function2(){

    task1();

} 

위와 같이 두 개의 함수가 있다고 가정하자. 편의상 두 함수를 나란히 배치했지만, 두 함수가 멀리 떨어져 있다고 가정하자. 중복된 코드는 task1()이다. 여기서 task2()를 추가한다고 가정해 보자. 논리적으로 task1() 이후에는 항상 task2()가 와야 한다. 그러면 각 함수의 task1() 이후에 task2()가 실행되도록 수정되어야 할 것이다.

그래서 개발자는 function1()에서 task1() 이후 task2()를 실행하도록 코드를 수정한다. 하지만 가정했듯이 두 함수가 아주 멀리 떨어져 있다면 function2() 함수가 있는지 모를 수도 있고, 그래서 task2()를 실행하도록 수정하지 않았다면 그 코드는 버그로 남게 된다.

이 문제는 중복 코드가 들어 있는 함수 간의 거리, 중복 코드를 만든 후 지나간 시간, 중복 코드의 개수, 중복 코드의 길이에 비례하여 커진다.


중복의 강요

중복된 코드는 중복을 강요한다. Unit Test를 한다면 중복된 코드에 대해서 중복으로 테스트를 만들어야 한다. 중복된 코드는 중복된 주석, 문서, 설명을 요구한다. 복사 해서 붙여 넣기는 쉽지만 그것을 계속 유지하기는 어렵다.


OCP(Open Close Principle) 위배

코드는 수정에 닫혀 있어야 한다는 SOLID 원칙에 위배 된다. 하나의 문제를 수정하기 위해 여러 코드를 수정해야 하기 때문이다.


코드량 증가

중복 코드는 코드의 양을 증가 시킨다. 코드의 양이 늘어나면 코드를 읽는데 걸리는 시간이 늘어나고, 수정이나 디버깅 이슈가 발생할 가능성이 높아진다. 같은 기능을 구현한다면 짧고 간결한 코드를 작성하는 것이 좋다.


중복 코드 동일성 검사

우스운 일일지 모르지만 중복 코드들은 모두 동일해야 한다. 그래서 개발자들은 종종 중복 코드가 완벽하게 동일한지를 검사한다. 이런 일이 발생하는 이유는 중복 코드를 발견하기는 쉽지만 생각보다 제거하기는 더 어렵기 때문이다. 어쨌든 이런 검사도 불필요한 비용을 발생시킨다.


Posted by 이세영2
,