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

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