알고리즘과 자료구조가 효율적인 코드를 작성할 때 필요한 것이라면, 코드 설계는 확장성과 가독성이 높아 유지 보수가 용이한 고품질의 코드를 작성할 때 필요하다.
복잡한 비지니스를 갖춘 대규모 프로젝트에서는 대단한 기술이 필요하진 않지만 많은 양의 코드가 필요한 경우가 있다. 이 때 코드를 잘 이해하고 유지 보수하기 위해서는 코드 설계와 관련된 지식이 필요하다.
잘 만들어진 소스 코드를 읽더라도 종종 이해하기 어려운 경우가 있다.
왜? 코드와 클래스의 양이 많아지면서 클래스 구조와 클래스 간의 관계 및 호출이 복잡해지기 때문이다. 이 때 코드의 확장성과 유연성, 유지보수성을 보장하기 위해 더 많은 디자인 패턴과 설계 원칙이 들어가게 되는데 이에 대한 지식이 없다면 코드의 설계 의도를 파악하기 어렵고 이해하는데도 시간이 오래걸린다. 반면 디자인 패턴 및 설계 원칙에 대해 잘 알고 있다면 코드는 쉽게 읽힌다.
코드가 좋다 나쁘다라고 평가할 수 있는 방법이 있어야겠다. 단순하게 좋은 코드는 확장하기 쉽고, 읽기 쉽고, 단순하고, 유지보수가 쉽다고 생각하는 방식은 명쾌하지가 않다.
그럼 어떤걸 고민해야하는가?
사람을 평가할때처럼 코드를 평가할 때는 여러 측면에서 종합적으로 평가해야한다. 또한 이렇게 평가하는 능력을 갖추는 것도 중요하다. 코드가 잘 작성되어있는지 여부를 평가할 수 없다면 아무리 많은 코드를 작성해도 코딩 능력이 향상되지 않을 것이기 때문이다.
우리는 이제 일반적으로 코드를 평가하는 중요 기준인 유지보수성, 가독성, 확장성, 유연성, 간결성, 재사용성, 테스트 용이성에 대해 집중적으로 살펴보도록 하자.
개발에서 유지 보수라 함은 버그의 수정, 이전 코드의 수정, 새로운 코드의 추가 정도에 불과하다.
코드의 유지보수성이 높다
라는 표현은 기존의 코드 설계를 손상시키거나 새로운 버그를 발생시키지 않고도 빠르게 코드를 수정하거나 추가할 수 있는 상태를 말한다.
반면 유지보수성이 낮다
라는 표현은 코드를 변경하거나 새로 추가하면 새로운 버그 발생 위험이 높고 전체적인 기능이 완벽하게 동작할 때 까지 시간이 걸린다라는 것을 의미한다.
유지보수성에 대한 개념을 이해하는 것은 어렵지 않다. 다만 코드를 보고 이게 유지보수성이 높은가 낮은가를 판단하는 방법을 아는것이 더 중요하다.