더 알아보기/팁

코딩 잘하는 팁 3가지(DRY, KISS, YAGNI)

은돌1113 2022. 1. 9. 15:17

코드 리뷰 시 자주 등장하는 세가지 용어를 통해 더러운 코드를 깨끗하게 만드는 방법을 알아보자!!

1. DRY (Dont't Repeat Yourself) → "반복하지 마라"의 약자입니다.
상반대는 개념에는 WET이 있습니다. 1) Write Every Time → "매번 작성하고" 2) Write Everything Twice → "모든 걸 두번씩 작성하고" 3) Waste Everyone's time → "결국 모든 사람들의 시간을 낭비하는 방식"을 말합니다.

DRY는 특정한 지식, 의도, 로직 등이 다양한 곳에서 다양한 방식으로 계속 반복 되어지는 것을 피하자 반복하지 마라!의 원칙입니다. 시스템 내에서 특정한 지식과 로직은 단 한 곳에서 명확하고 신뢰 할 수 있도록 존재 해야 합니다. 코드를 바라 볼 때 반복적으로 나타나는 경우에는 반복을 피하세요! 드라이 하게 작성 하세요!

DRY를 통해 얻을 수 있는 효과는 코드의 재사용을 높일 수 있고, 변경사항이 필요할 경우 한군데에서만 수정하면 되기 때문에 유지보수성을 높일 수 있습니다.

2. KISS (Keep It Simple, Stupid) → "심플하고 멍청하게 유지하자!"의 약자입니다.
KISS의 원칙은 "대부분의 시스템은 복잡하게 보다는 심플하게 만들어 졌을 때 최고로 잘 동작한다. 그러므로 시스템을 디자인 할 때 심플함이 주 목표가 되어야 하고 불필요한 복잡성을 피해야 한다."가 원칙입니다.

KISS는 방대한 곳에서 적용 할 수 있는데요 대표적으로는
1) Code
: 코드를 작성 할 때 열 줄짜리 코드를 한 줄로 바꾸기 위해서 화려한 테크닉을 이용해서 가독성을 떨어트리는 것보다는 누구나 이해 할 수 있도록 심플하고 간결하게 작성하는 것이 좋습니다.
2) Function
: 함수의 이름, 매개변수 그리고 구현된 사항의 코드를 읽었을 때 한번에 이해 할 수 있도록 한가지 기능을 수행하는 함수를 심플하게 작성하는 것이 좋습니다.
3) Class
: 한가지의 책임만 담당하고 있는 Class를 심플하게 만드는 것이 좋습니다.
4) View
: 사용자에게 보여지는 UI를 담당하는 컴포넌트에는 별도의 비즈니스 로직을 포함하지 않고, 최대한 심플하고 멍청하게
UI에 관련된 로직들만 담당하고 있어야 합니다.
5) Service
: 여러가지 기능을 복합적으로 담당하는 하나의 큰 서비스를 만들기 보다는 단 하나의 기능을 담당하는 개별적인 심플한 시스템을 만드는 것이 좋습니다.
6) System
: 이를 통해서 전체적인 시스템을 키스하게 심플하게 만들 수 있습니다.

이처럼 KISS는 코드, 함수, 클래스 등을 거쳐서 전체적인 시스템을 개선 할 수 있도록 도와주는 원칙입니다.

3. YAGNI (You Ain't Gonna Need It) → "너 그거 필요 없어!"의 약자입니다.
필요 없는 기능을 작성하는 개발자는 생각보다 많습니다. 코드 리뷰를 할 때 여기에서 많은 지적이 나오기도 합니다.

1) 정확한 기능을 잘 구현한다면 출시가 연기가 되거나 유지하는 비용이 발생 할 수 있고
2) 맞는 기능이지만 잘못 만들었을 경우 다시 처음부터 수리하고 변경 해야 되는 수리 비용이 발생하게 됩니다.
3) 잘못된 기능을 구현한 경우에는 그 잘못된 기능을 개발하는(했던) 모든 개발 비용 뿐만 아니라 유지보수, 경우에 따라서는 수리 비용에 따른 모든 개발 비용이 발생 할 수 있습니다.

그래서 개발을 할 때는 필요하지 않은 기능, 지금 당장 사용하지 않는 기능, 너무나 지나치게 미래 지향적인 내 코드와 함수를 미래에 확장성을 위해서 이렇게 사용해도 되고 저렇게 사용해도 되도록 너무 지나치게 만들지는 말자입니다.

그렇다고 현재 기능만 잘 동작하도록 코드를 아무렇게나 작성하자는 아닙니다. 코드를 깨끗하게, 변경이 쉽게, 유지보수가 용이하도록 시스템에 불필요한 복잡성을 더 하지 않는 내에서 확장성이 있는 코드를 작성해야 합니다.


최종 정리
시스템에서 YAGNI를 통해서 불필요한 요소들을 제거하고 KISS를 통해서 심플함을 추가하면 퀄리티 있는 코드, 시스템을 만들 수 있습니다.

출처