입사해서 가장 많이 듣은 말.


코드를 짤 때 절대 중복코드를 쓰지마라.


그리고 얼추 2년이 다 되가는 지금 난 다시 아니 여전히 중복코드를 쓰고있다.


중복코드를 쓰게되는 이유


1번

시간이 없다.

오늘 안에 처리해야 할 건 많은데

코드 품질을 생각하며 코드를 작성하기에는

아직 신입 열정에 가득찰 땐

이런 것 하나하나 따져가면서

선배들에게 묻곤했다.


중복되는 것 같으니

이렇게 하나로 빼서 쓰면 안될까요?


지금은

질문이 없다.


내 멋대로, 나 편한대로

빠르게 처리할 수 있는 방법으로 점점 빠져든다.


예전에는

조금 느리더라도

코드 구조나 변수 이름들이 내 마음에 들 때까지 고민하고 고민했다.

그로인해서 야근하게 되더라도.


지금은

퇴근 시간이 되면 도망가기 바쁘다.


이렇게 일 끝나고 카페에 앉아서

공부하는 것도 오랜만이다.

너무 행복한데, 맨날 잊고산다.


아무튼 다시 본론으로 들어와서

중복코드를 쓰지마라

라는 단순하지만 뭐가 뭔지 모르겠는 이 말.


그래서 순전히 내가 겪은 것만 쓴다.

중복코드를 쓰는 순간, 버그가 발생 확률이 대폭 상승한다.


근거 1

개발은 나만 하지 않는다.

언젠가 나의 코드를 그대로 사용하는 사람도

내가 만든 함수나 메서드를 사용하는 사람이 생긴다.


시작은 하나의 중복코드였지만

점점 사용되는 곳이 많을 수록

나도 모르게 겉잡을 수 없이 불이 번져있다.


그렇게 나도 모르게 증가하는 중복코드들.

단순하게 제거하자고 마음먹으면 쉽다.

쉬울 것 같다.

그런데 어렵다.


1번

가끔씩 구조가 엉켜서 빼기가 중복코드를 어려운 부분이 있다.

2번

이미 검증이 완료됐는데 구조를 바꾸는 것은 최소 야근 각오하고 해야한다.

3번

코드는 멈춰있지 않고 계속 변한다.

언젠가 이 중복코드를 고쳐야한다면

여러 군데 다 퍼져있는 중복코드를 고치는 건 어마어마한 일이 되버린다.


단순히 모두 수정 기능으로 해결안되는 부분이 투성이다.


테스트케이스를 잘 작성해둔 코드나

유닛테스트가 잘된 코드라면 그래도 괜찮겠지만


그런게 없다면

수정했을 때 버그가 없다고 아무도 확신해주지 않는다.

그러므로 내가 하나하나 다 확인해야 한다.


신입때는 확실하게 하기 위해서 다했다.

배운 것을 쓰고 싶은 욕심도 있었고

이런 것을 하면서 코드 품질에 기여하고 있다는 생각을 했다.


그런데 점점 귀찮다.

일을 쌓여만 가고

모르는 것은 아직 투성이고

외적인 일들로 일에 집중에 안되는 요즘같은 날이면


그리고 또 문제

중복코드는 어쩔 수 없이 코드 크기를 증가시킨다.


난 대학생 때 하나의 함수가 최소 50줄 최악은 100줄은 안넘을지 알았다.


그런데 아니다.


하나의 함수가 3천줄짜리 함수가 존재한다.

그것도 너무 중요한 부분에.


잘못고쳤다가는 난리날까봐 건드리기가 너무 무서운 부분이다.

언젠간 고쳐야겠지.


이젠 내 업무가 됐으니까.

하지만 엄두란게 생길 때가 언젤까?


내가 이 회사를 떠나기 전에 오긴 할까?


아무튼 셀 수 없는 매크로와 중복코드의 연합은

컴파일 시간, 바이너리 크기에도 영향을 준다.


처음엔 끽해야 얼마나 영향을 주려고 생각했다.

하지만

10년 이상 크기가 커져온 대형 프로그램에서

현재 안드로이드에서 풀빌드하는데 걸리는 시간은 5시간이며

윈도우에서는 2시간이다.


그러다 빌드 실패하면 반나절이 사라진다.


나 오늘 뭐했니...?


이런 날은 눈치가 보여서라도 강제 야근이다.


또한 중복코드를 없애는 것도 일이다.

기존에 존재하는 수없이 많은 중복코드들

배운대로 열심히 없앤다.


하나로 통합하고, 클래스를 만들어 관리하고, 유틸 함수로 바꾸어 하나로 쓰도록 한다.

음 그런데

때로는 코드 구조 결함 또는 특정 이유를 위해서

중복코드로 작성하는 경우가 있다.


이를 모르고 내 멋대로 잘못 고쳤다가

코드 리뷰 단계에서 이를 선배님들이 잘 캐치해준다면

다행이지만

아무일 없이 지나갔다가

나중에 갑자기 잘되던 기능이 안된다고 연락올 때

그리고 로그를 뒤져보니 내 잘못으로 나올 때

머리 속은 화이트아웃이다.


그리고 또 중복코드를 생성하지마라.

이게 기준이 굉장히 애매하다.

그래 중복코드 안짜는게 중요한 것은 알겠다.


그런데 유닛테스트를 위한 ASSERT() 문들과

아니면 당연한 로직들

생성 후 생성이 잘됐는지 검사하는 구문들


중복코드인지 아닌지 애매한 것들

그런게 많다.

너무 많다.


배운대로 실천하고 싶은데

잘 안 된다.


이게 실력이겠지.


그러므로

기존 것을 수정하여 변화시키는게 아닌

새로운 것을 만들어나갈 때만큼이라도


중복코드를 사용하지 말자!


잊지말고.


귀찮다고 배운대로 안하지말자.

좀 돌아가보면

실력이 늘어있는게 느껴질 때가 오겠지.



+ Recent posts