마른 체질이라면 살이 쪄야한다. 반대로 뚱뚱하다면 살을 빼야한다. 인간다운 삶을 위해 자기관리가 필수이듯, 코드도 관리가 필수적이다. 기능이 필요해지기 전까지 추가로 코드를 만들지 않아야 한다. 앞으로 이 기능이 추가되지 않을까? 생각하며 코드를 만드는 행위는, 겨울에 사냥을 못해 굶어죽을까봐 미리 음식을 먹어두는 행위와 똑같다. 21세기 이전부터 인간은 미리 먹어둘 필요가 없었다, 살만 찔 뿐이지. 코드도 똑같다. 미리 만들어둔 코드는 복잡도만 올릴 뿐, 아무런 도움이 되지 않는다. 필요하기 전까지 만들지 말자. You Aren't Gonna Need It. 유식하게 YAGNI 라고 읽어보자.
죽은 코드라고 해서 유지보수하지 않을 수 있을까?
@Deprecated
public String oldPrettify(String str) {
String prepared = prepare(str);
// ...
return result;
}
public String newPrettify(String str) {
String prepared = prepare(str);
// ...
return result;
}
private String prepare(String plain) {
// ...
return renew;
}
이 상황에서 prepare 메서드를 수정했다고 하자. 끔찍하게도... public String prepare(String plain, String option)
모양이 되었다고 하자. 이 상태에서 데드코드를 건드리지 않을 수 있을까? 물론 우리에겐 메서도 오버로딩이란 훌륭한 방법이 있지만... 데드코드 삭제가 본질적인 해결 방법이지 않을까? 프로젝트가 커지면 커질수록 불필요한 코드가 늘어나는 것은 숙명이다. 하지만 죽은 코드를 삭제하지 않는다면 불필요한 코드는 기하급수적으로 늘어날 것이다.
모두들 한번쯤 경험이 있을 것이다. "XX, 이거 어떤 놈이 짰어!", 그 어떤 놈은 6개월 전의 자신이다. 자괴감 느끼지 않아도 된다. 그 6개월 동안에 성장이 있었기 때문에 그렇게 보이는 것이다. 자신감과 자부심을 느껴도 된다. 다만 수정해 개선하지 않는다면 과거로부터 도망칠 뿐이다. 알프레도 아저씨는 토토에게 다 잊어버리고 떠나라고 했지만 (시네마천국을 보면 이해할 수 있다. 깨알 같은 명작 추천.), 떠나는 개발자는 무책임할 뿐이다.
작성할 때 완벽했다고 생각했던 코드도, 조금만 지나고 보면 이상해보인다. 아마 버그도 찾을 수 있을 것이다. 꼭, 돌아보자.