개발 용어 관련 - Dry Code / Wet Code?
최근에 재미있는 약자를 알게 되어서 소개해 볼까 합니다.
바로 Dry 와 Wet입니다.
Dry와 Wet
먼저 Dry는 Don't Repeat Yourself의 약자입니다.
뜻을 번역하면 자기 자신을 반복하지 말라는 소리죠.
즉 코드의 반복을 피하 라라는 소리입니다.
Wet은 Wrtie Everything Twice의 약자입니다.
모든 코드를 두 번씩 쓰게 되는 코드 반복성에 대한 풍자의 말입니다.
Wase Everyone's Time으로도 쓰이기도 하죠
반복되어 정리되지 않은 코드는 접하는 모든 사람의 시간을 낭비하게 된다는 뜻입니다.
Be Dry나 Don't Be Wet 둘 다 코드의 반복을 피하라는 소리입니다.
Dry 하게 코드를 작성하세요
가끔가다 선임급들이 초보 개발자들에게 많이들 물어보는 말입니다.
이유는 초보 개발자들이 개발 원칙을 잘 준수하지 않기 때문입니다.
같은 기능이 있을 때 복사 붙여넣기를 해서 위쪽에서 썼던 코드를 아래에서도 똑같이 쓰고 있거든요.
예를 들어 덧셈 코드를 한다고 하면 위쪽에서는 5+3을 하고
아래쪽에서는 또 새로 7+8을 하고 있습니다.
그냥 메서드를 만들어서 파라미터를 넘기고 결괏값을 return 하면 끝인데 말이죠.
메서드화한다고 해서 끝이 아닙니다.
메서드는 어디에 선언합니까? 클래스 내부에서 선언하죠?
하지만 그 메서드가 과연 그 클래스 안에서만 쓰일까요?
분명 또 같은 메서드를 다른 클래스에서 필요로 하는 경우가 매우 많을 겁니다.
그렇다면 그것 역시 반복이 아닐까요?
공통적으로 쓰이는 메서드를 한 클래스에 할당하고 필요할 때 불러오는 것이 깔끔하지 않을까요?
또한 유지 보수 작업을 할 때 기능의 변화, 혹은 수정 작업이 필요할 때 클래스 내에 한곳에 있는 메서드를 수정하는 게 빠르고 실수가 덜할까요 해당 기능을 사용하는 모든 메서드, 코드들을 찾아서 수정하는 게 실수가 덜하고 빠를까요?
당연히 전자가 좋겠죠?
또한 후임자가 들어와서 코드를 훑어볼 때 Dry 하지 않게 짜놓은 코드를 보면... 정말 답이 없겠죠...
괜히 SI에서 과장 ~ 부장급들이 중간마다 와서 코드 리뷰 해주고 혼내는 게 아닙니다.
진짜 Wet 하게 짜놓으면 나중에 유지 보수 담당하는 사람이 굉장히 힘들어집니다.
그래서 프로젝트 끝물에 고도화 작업한다고 단체로 개발했던 화면들 다시 들어가서 중복되는 코드를 날리고 Dry 하게 만드는 게 아니에요...
Dry의 장점
1. 코드를 읽기 매우 쉬워집니다.
- 이게 무슨 소리냐? 개발자가 개발을 끝마친 다음 유지 보수작업을 과연 해당 기능을 개발한 개발자가 하고 있을까요? 또 내가 몇 달 전 개발한 기능을 여전히 기억하고 있을까요?
해당 코드를 기억해 내지 못하거나 처음 보는 사람들은 반드시 전체적인 코드를 읽어봐야 합니다.
Dry 하게 코드를 작성하면 코드 줄이 짧아지고 중복되는 기능이 있을 때 메서드화 해놓으면 다시 읽을 필요가 없겠죠?
2. 뛰어난 재사용성
- 코드를 클래스 내 메서드로 만들어놓고 똑같은 기능을 사용할 일이 생기면 해당 클래스의 메서드를 호출하기만 하면 됩니다. 그렇다면 매우 뛰어난 재사용성을 가지게 됩니다.
3. 시간 비용이 줄어듭니다.
- 후에 기능을 수정하거나 오류가 생길 때 해당 클래스의 메서드만 찾아서 수정하면 되니 당연히 시간이 적게 걸립니다.
4. 유지 보수의 용이성
- 항상 말하는 게 있죠 의존성 (dependency)를 낮춰라 3번과 마찬가지입니다. 시간 비용을 줄이기 위해 하는 말이죠.
Dry 한 코드는 모두 쪼개져있어서 유지 보수하기가 매우 편합니다.
결론
개발 원칙이라는 게 듣고 보기에는 정말 합리적이고 좋다고 생각하지만 적용하고 실천하기에는 어렵다는 거 초보 개발자분들은 모두 아실 겁니다.
하지만 개발에 있어서 정말 꼭 필요하고 중요하다고 정리까지 해놓은 것이기 때문에... 계속해서 생각하면서 자신의 코드에 적용시키려고 노력을 꼭 하셔야 합니다.