본문 바로가기

4. 개인 취미 생활

[53] 소프트웨어 개발 원칙, 세 가지(KISS, DRY, YAGNI)

개발과 관련된 책들을 읽다보면 심심찮게 등장하는 단어들이 있습니다.
DRY, KISS 등과 같은 단어들입니다.
'처음에는 왜 이상한 단어들이 갑자기 튀어나오지?'라는 생각이 들었는데,
나중에 알고 보니 이 단어들이 소프트웨어 개발 원칙과 관련된 단어들이었습니다.
이번 글에서는 이 소프트웨어 개발 원칙에 대해 이야기해보고자 합니다.

소프트웨어 개발 원칙을 알아보자!


1. KISS(Keep It Stupid, Simple!)

이 'KISS'가 아니다!

KISS는 "Keep It Simple, Stupid!"의 약자로, 우리말로 "간단하고 단순하게 해라!" 정도로 해석할 수 있습니다.

KISS는 소프트웨어 개발 원칙으로도 사용하지만, 우리 삶의 많은 부분에 적용됩니다.

 

인류 역사를 바꾼 천재로 불리는 레오나르도 다빈치는 "단순함은 궁극의 정교함이다.(Simplicity is the Ultimate Sphisitication.)"라고 말했고,

최고의 과학자 중 한명인 알버트 아인슈타인은 "할머니가 이해하도록 설명하지 못한다면, 이해한 것이 아니다.(You don't really understand something unless you can explain it to your grandmother.)"라고 말했으며,

역시 최고의 과학자 중 한명인 리처드 파인만의 공부법으로 알려진 "파인만 테크닉(Feynman technique)"에서도 자신이 이해한 것을 (어린 아이가 이해할 수 있을 정도로) 쉬운 말로 설명하는 것을 강조하고 있습니다.

 

소프트웨어를 개발하는 과정에서도 이 원칙을 적용하여 누가 봐도 쉽게 이해할 수 있게 소스코드를 작성하고, 동작 방식을 단순하고 간단하게 만들도록 고민해야겠습니다.

 

https://en.wikipedia.org/wiki/KISS_principle

 

KISS principle - Wikipedia

From Wikipedia, the free encyclopedia Design principle preferring simplicity A simple sign of the KISS principle (excluding the last word) KISS, an acronym for "Keep it simple, stupid!", is a design principle first noted by the U.S. Navy in 1960.[1][2] Fir

en.wikipedia.org


2. DRY(Don't Repeat Yourself!)

이 DRY는 아니겠고, DRY는 무슨 말일까?

DRY는 "Don't Repeat Yourself!"의 약자로 반복하지 말라는 말입니다.

 

"실용주의 프로그래머(The Pragmatic Programmer)"라는 책은 1999년에 출간되었고, 2019년에 20주년을 맞아 개정되어 재출간될 정도로 개발자들 사이에서는 꾸준히 인기있는 책입니다. 이 책에서 "모든 지식은 시스템 내에서 단 한 번만, 애매하지 않고, 권위 있게 표현되어야 한다."고 하면서 DRY를 강조하고 있습니다. 또 DRY 원칙은 "소프트웨어를 신뢰성 높게 개발하는 유일한 길", "개발을 이해하고 유지 보수하기 쉽게 만드는 유일한 길"이라고도 표현하고 있습니다.

 

소프트웨어를 개발하다보면 동일한 기능을 하는 코드를 "복사/붙여넣기"하는 경우가 종종 있는데, 이는 추후 해당 코드를 수정해야할 일이 생긴다면 이렇게 작성된 모든 코드를 일일이 수정해야하는 불상사가 생깁니다. 그리고 자칫 잘못하여 하나라도 빼먹었다가는 버그가 발생하게 됩니다. 사소하다고 생각할수도 있지만 개발할 때에는 절대 잊어서는 안 될 원칙이라고 할 수 있겠습니다.

 

https://en.wikipedia.org/wiki/Don't_repeat_yourself

 

Don't repeat yourself - Wikipedia

From Wikipedia, the free encyclopedia Principle of software development "Don't repeat yourself" (DRY) is a principle of software development aimed at reducing repetition of information which is likely to change, replacing it with abstractions that are less

en.wikipedia.org


3. YAGNI(You Aren't Gonna Need It!)

야... 야근??

YAGNI는 You Aren't Gonna Need It!의 약자로 우리말로 "야근"이 아니라 "넌 그게 필요없을 거야." 입니다.

다시 말하면 꼭 필요한 기능이 아니면 미리 추가하지 말라는 말입니다.

 

다시금 소프트웨어 개발과 우리의 삶이 비슷하다고 느끼는 부분인데,

우리는 이따금 일어나지 않은 일을 걱정하며 이를 대비하기 위해 많은 시간과 에너지를 소모하곤 합니다.

하지만 시간이 지나면 대부분 걱정했던 일은 일어나지 않고, 우리는 시간과 에너지를 낭비한 것에 후회합니다.

"걱정을 해서, 걱정이 없어지면, 걱정이 없겠네."라는 말이 있을 정도입니다.

 

개발을 하면서도 불필요한 시간과 에너지 낭비를 하지 말아야 합니다.

'혹시 필요할지도 몰라.', '나중에 유용하게 쓰일거야.'라는 생각에 미리 만들어둔 기능들은

오히려 나중에 버그를 일으키는 범인이 되거나, 기능의 변경사항이 생겼을 때 시간을 잡아먹는 범인이 될지도 모릅니다.

 

https://en.wikipedia.org/wiki/You_aren%27t_gonna_need_it

 

You aren't gonna need it - Wikipedia

From Wikipedia, the free encyclopedia Software engineering principle "You aren't gonna need it"[1][2] (YAGNI)[3] is a principle which arose from extreme programming (XP) that states a programmer should not add functionality until deemed necessary.[4] Other

en.wikipedia.org


사실 더 검색해보면 위에서 말한 세 가지 원칙 외에도 다양한 소프트웨어 개발 원칙들이 존재합니다.

훌륭한 개발자가 되기 위해 새로운 기술을 익히고, 새로운 지식을 습득하는 것도 중요하지만

이런 원칙들을 잊지 않고 꾸준히 지켜나가는 것이 어찌보면 더 중요한 핵심이 아닐까요?