Development Memories

클린코드를 위한 프로그래밍의 기본 법칙 (DRY, KISS, YAGNI)

친절한올드보이 2021. 5. 21. 11:12
반응형

좋은 코드를 작성하기 위해 클린코드 관련 책도 읽어보면서 가장 기본적인 사항으로 머리속에 넣어두면 좋을것 같아서 각각의 개념을 보고 좋은 코드에 대한 간략한 정의들도 기록해 보았습니다.

 

1. DRY - Don't Repeat Yourself

중복 코드 작성을 하지 말아라.

중복 코드를 이곳저곳에 작성하지 않아야 한다. 작은 규모의 프로젝트 일때는 복잡도가 없기 때문에 유지보수와 코드 리딩이 쉽겠지만 규모가 큰 프로젝트나 점점 커져가는 프로젝트라면 복잡도가 기하급수적으로 늘어나기 때문에 나중에 유지보수와 코드 리딩이 어려워져 버그 발생률도 높아지게 됩니다.

 

 

규모가 큰 프로젝트에서는 각 부분을 담당하는 여러 팀들이 협업을 이루어 진행하게 됩니다.

각각의 팀에서 개발된 기능이나 함수 등을 서로 연동하여 하나의 구현체로 합치게 되는데, 공통적으로 사용되는 코드들을 각자의 팀에서 각각의 클래스나 메소드등으로 구현 했다면, 나중에 버그가 발생하였을때 중복된 모든 코드를 찾아 수정을 해줘야 합니다.

 

이렇게 수정된 코드에서 버그가 다시 발생했다면 반복의 연속이 될것 입니다. 그렇기 때문에 공통된 코드는 하나의 함수로 만들어 다른 곳에서 참조 할수 있게끔 하는것이 좋습니다.

 

 

 

 

2. KISS - Keep it simple, stupid

단순하고 간결하게 디자인 해라.

 

KISS는 “Keep it small and simple.”, “Keep it short and simple.”, 또는 “Keep it simple, stupid.”로 표현하기도 하는데,  소프트웨어 디자인을 간단하고 단순하게 하는 것을 말합니다.

 

규모가 큰 프로젝트를 단순하게 디자인 하지 못하고 복잡하게 엉키고 설키게 구현을 한다는 것은 프로젝트의 요건정의를 제대로 이해하지 못했다는 이야기가 됩니다.

 

그렇기 때문에 프로젝트가 진행되기 전에 프로젝트에서 요구되는 요건정의를 이해하는 것이 중요합니다. 그러면 전체적인 그림과 어떻게 구현을 해야할지에 대해서 머리속에 대략적으로 그림이 그려지게 될것이고, 그 기반을 토대로 팀원들과의 회의를 통해서 프로젝트의 설계를 진행할 수 있을 것 입니다.

 

 

 

 

 

3. YAGNI - You Ain't Gonna Need it

정말로 필요할때까지 작성하지 말아라.

 

프로젝트 진행중이거나 코드 작성중에 현재는 필요하지 않지마 추후에는 필요할 것 같은 기능이나 코드가 있더라도 예측하여 미리 추가를 해 놓지 말라는 이야기 입니다.

 

추후에 필요할 것 처럼 보이지만 사양 변경으로 필요가 없어질 수 도 있고, 코드 추가로 인해 코드양도 많이지고, 기능 추가로 인해 기능의 복잡도도 높아지므로 현재의 코드나 프로젝트 기능에 집중을 방해하는 요인으로 작용하게 되며, 최악으로는 버그 발생으로 이어지게 될 가능성도 있습니다.

 

예를 들어서, DB와 연동하는 코드 작성중에 현재 프로젝트에서는 MySQL만 사용하지만 나중에 SQL Server나 Oracle 연동 가능성이 있어 미리 코드를 구현해 두었다면 그만큼 작업 시간 소요나 프로젝트 기간에도 영향을 미치기 때문에 그에 대한 비용 발생도 무시 못하게 됩니다.

 

물론 미리 구현해 두면 추후에 쉽게 연동을 할 수 있다는 장점이 있지만 현재로서는 장점보다 단점이 많기 때문에 하지 않는 것이 좋다는 이야기가 됩니다.  다만 추후 추가를 위해서 인터페이스화 시키거나 추상화를 해 놓고 실제 연동 클래스만 추가하면 가능하도록 하는 구조로 코딩해 놓는다면 좋을것 같습니다.