소프트웨어를 알흠답고 잘 짜기 위한
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