들어가며...
많은 개발자들이 좋은 코드를 작성하기 위해 피나는 노력과 계속되는 리펙토링이 이루어집니다.
"좋은 코드"라는 것을 만들기 위해서죠. 그럼 좋은 코드는 무엇이며 많은 개발자들이 왜 좋은 코드를 작성하기 위해서 그렇게 노력을 하는 것일까요?
좋은 코드란?
좋은 코드란 사실 정의 할 수 있는 것이 아닙니다. 개개인의 좋은 코드는 각기 다르기 때문이죠.
하지만 상당 수의 개발자들은 다음과 같은 코드를 좋은 코드라고 인식합니다.
- 읽기 쉬운 코드
- 중복이 없는 코드
- 테스트가 용이한 코드
그럼 왜 개발자들은 위에 있는 코드들이 좋은 코드라고 인식할까요?
좋은 코드를 작성해야하는 이유
좋은 코드는 자기 자신에게만 필요하다고 생각하실 수 있겠지만 읽기 쉬운 코드는 코드를 작성하시는 여러분만이 필요한 것이 아닙니다. 바로 다른 개발자들도 보았을 때 보기 편해야 합니다.
개발은 혼자하는 것이 아닌 다같이 협업 하는 것입니다. 만약 남이 작성한 코드를 봤는데 너무 역겨우면 과연 같이 일하고 싶을까요?
"누군가의 Output은 누군가의 Input이다."
말 그대로 여러분이 작성한 코드로 일을 처음 시작하시는 분들도 있고 다른 분이 작성한 코드로 여러분들이 일을 시작해야 할 수도 있습니다.
읽기 쉬운 코드
여러분들이 한 책을 읽는 다고 한 번 가정해봅시다. 책에는 다양한 주제가 있고 다양한 내용이 있습니다. 책은 순서대로 A -> B -> C 순서대로 간다면 어떻게 될까요? 당연히 순서대로 읽으니 책을 이해하는 데 있어서 편하겠죠. 하지만 만약 C -> A -> B 대로 간다면 어떻게 될까요? 벌써 부터 어지럽죠? 또한 쉬운 말로 책이 쓰여졌있으면 어떨까요? 반대로 어려운 말들로 책이 쓰여져있으면 어떨까요?
읽기 쉬운 코드란 코드의 진행 방향이 순서대로 이루어져 있으며 코드의 구조와 의도가 명확하게 드러나는 것을 의미해요.
중복이 없는 코드
여러분들이 사람들과 대화 할 때, 같은 말을 반복하는 사람과 같은 말을 반복하지 않는 사람이 있으면 누구와 더 대화하기 쉬울까요? 같은 말을 반복하면 대화에 주제가 더 이상 나아가질 않게되요. 하지만 같은 말을 반복하지 않으면 대화가 술술 잘 넘어가게 되죠.
중복이 없는 코드란 같은 기능을 하는 코드 혹은 같은 의미의 코드를 반복적으로 작성하지 않는 것이에요.
테스트가 용이한 코드
여러분들은 수학을 공부하고 있어요. 수학공식을 외우고 이해하고 있습니다. 공부를 끝낸 후 시험을 통해 지금까지 배운 공식을 잘 배웠는지 확인해야 합니다. 근데 시험을 보는 데 시험 문제가 엉뚱한 하다면 어떨까요? 내가 공부한 것들을 확인할 수 있을까요?
시험은 내가 공부한 것을 테스트하기 위한 것이에요. 내가 공부한 것이 아닌 엉뚱한 것이 나왔다면 그 시험은 잘못된 시험이죠.
테스트가 용이한 코드란 설계한 코드를 시험하기 위한 코드에요. 시험을 통해 코드가 잘 작동하는 지 살펴보는 코드죠. 또한 테스트 케이스가 격리 되고 특정 기능을 테스트할 때 다른 부분의 동작에 영향을 주지 않아야 합니다.
시험을 보는 데 시험과목이 국어인지 수학인지 영어인지 햇갈리면 안되겠죠? 테스트 케이스가 격리 되고 특정 기능을 테스트할 때 다른 부분의 동작에 영향을 주지 않아야 하는 이유는 바로 어떤 기능을 테스트 하는 지 알 수 없게 되기 때문입니다.