소프트웨어 개발 3대 원칙 (KISS, YAGNI, DRY)

주형(Jureamer)·2022년 4월 21일
3
post-custom-banner

소프트웨어를 알흠답고 잘 짜기 위한
KISS(키쓰!) YAGNI(야근!!) DRY(드롸이!!)를 알아보자

아직까지 별 거 없는 실력이지만 프로젝트를 한 두어개 해보다보니까
구현 이후 깔끔한 코드를 어떻게 짜는 지에 대해서 고민을 자주 하게 되는 것 같다.

사실 SOLID라는 객체지향에 있어서 중요한 5가지 원리가 있지만
KISS, YAGNI, DRY는 좀 더 직관적이기 때문에 알아두면 코드 짤 때 바로 떠올릴 수 있어 도움이 많이 될 것 같다.

KISS (Keep It Simple, Stupid)

심플하고 멍청하게 유지하라!

"Most systems work best if they are kept simple rather than made complicated;
therefore, simplicity should be a key goal in design 
and unnecessary complexity should be avoided."

대부분의 시스템은 복잡하게 보다는 심플하게 만들어졌을 때 최고로 잘 동작한다. 
그러므로 심플함은 디자인 할 때 키 목표가 되어야하고 불필요한 복잡성은 피해야 한다.

한 줄로 만들기 위해 10줄짜리를 1줄로 만들어서 가독성을 떨어뜨린다면 KISS한 코드가 아니다.

주석이 없어도 함수 이름, 매개 변수, 코드를 통해 한 번에 이해가 가능한 수준으로 작성하는 것이 좋다.

MVC 패턴을 생각했을 때처럼 관심사를 분리하고, 각 기능은 한 기능만을 담당하는 것이 좋고 한 가지의 책임만을 가져야 한다.

SOLID의 S(단일책임원칙)를 떠올리면 되겠다.

// 예제

// KISS하지 않은 함수 (한 함수에서 여러 가지 기능 담당)
function plusOrMinus(a, b, isPlus) {
  if(isPlus === "plus") {
    return a + b
  } else {
    return a - b
  }
}

// KISS한 함수 (단일 기능, 단일 책임)
function plusNumbers(a, b) {
  return a + b
}

function minusNumbers(a, b) {
  return a - b
}


DRY - Don't Repeat Yourself

중복을 피해라!

"Every piece of knowledge must have a single, unambiguous, 
authoritative representation within a system"

시스템 내 특정한 지식(로직)은 단 한 곳에서 명확하고 신뢰할 수 있도록 존재해야한다.

기능뿐만 아니라 로직, 지식, 의도, 비즈니스 로직 모두가 해당되는 것!

정말 기본적인 것이지만 나도 시간에 끌려가다가 기능 위주로 막 짜고 나중에 보면

중복 혹은 비슷한 기능이 있다는 것을 많이 경험했다.

이러한 것들은 리팩토링을 통해 제거하거나 통합하는 편이 좋다.



YAGNI - You Ain't Gonna Need it

지금 필요없는 기능을 만들지 말라!

  • 지금 필요 없는 기능을 개발한다면 나중에 필요없어질 수도 있다.
  • 이는 개발 비용, 유지보수 비용, 더 나아가서 수리 비용까지 야기할 수 있다.
  • 불필요하게 개발하는 작업이 다른 코드에도 영향을 미칠 수 있다.


Reference

profile
작게라도 꾸준히 성장하는게 목표입니다.
post-custom-banner

0개의 댓글