맨위로가기

YAGNI

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

YAGNI는 "You Ain't Gonna Need It"의 약자로, "작동할 수 있는 가장 단순한 것을 하라"는 익스트림 프로그래밍(XP) 원칙에 기반한 소프트웨어 개발 철학이다. YAGNI는 코드 리팩토링, 자동화된 단위 테스트, 지속적인 통합과 같은 다른 실천 방법들과 함께 사용되며, 불필요한 기능을 미리 구현하는 것을 지양한다. YAGNI 원칙을 옹호하는 사람들은 불필요한 기능 구현으로 인한 시간 낭비, 자원 낭비, 설계 복잡성 증가, 개발 시간 지연 및 버그 증가 등을 주요 이유로 제시한다.

더 읽어볼만한 페이지

  • 프로그래밍 원칙 - 블랙박스
    블랙 박스는 자극 입력과 출력 반응의 관점에서 시스템을 추상화하여 외부적으로 관찰하는 이론으로, 전자 회로 이론, 사이버네틱스, 시스템 이론 등 다양한 분야에서 활용되며 예측 모델 구축 및 유효성 검증, 그리고 항공기 비행 기록 장치나 함수 교육 도구 등 실생활에도 응용된다.
  • 프로그래밍 원칙 - 정보 은닉
    정보 은닉은 소프트웨어 설계에서 모듈 내부 구현을 숨기고 정의된 인터페이스를 통해서만 상호 작용하도록 하여 모듈 독립성을 높이고 시스템 복잡성을 관리하는 데 중요한 기법으로, 객체 지향 프로그래밍의 캡슐화와 관련된다.
  • 소프트웨어 개발 철학 - 애자일 소프트웨어 개발
    애자일 소프트웨어 개발은 1990년대에 등장하여 개인과 상호작용, 작동하는 소프트웨어, 고객과의 협력, 변화에 대한 대응을 핵심 가치로 삼고 적응형 계획과 반복적 실행을 통해 시장 출시 속도와 위험 완화를 추구하는 소프트웨어 개발 방법론이다.
  • 소프트웨어 개발 철학 - 유닉스 철학
    유닉스 철학은 단순성, 모듈성, 재사용성을 중시하며, 한 가지 일을 잘하는 프로그램, 협력적인 프로그램, 텍스트 스트림 처리 프로그램을 지향하는 소프트웨어 설계 원칙으로, 현대 운영체제 및 소프트웨어 설계에 영향을 주지만 비판도 존재한다.
YAGNI
YAGNI 개요
명칭You Ain't Gonna Need It (너는 그것이 필요하지 않을 것이다)
유형소프트웨어 공학 원칙
설명
핵심 내용기능이 실제로 필요할 때까지 추가하지 말라는 원칙이다. 필요할지도 모르는 기능에 대한 코드 작성은 시간 낭비이며, 현재 요구 사항을 해결하는 데 집중해야 함을 강조한다.
배경익스트림 프로그래밍(XP)에서 유래됨
목표개발 과정을 단순화하고 불필요한 복잡성을 줄여 시간과 노력을 절약
장점
단순성 유지코드베이스를 작고 이해하기 쉽게 유지
시간 절약불필요한 기능 구현에 드는 시간과 노력 절약
요구사항 집중현재 요구사항에 집중하여 더 나은 솔루션 개발 가능
변경 용이성코드베이스가 작고 단순하여 변경 및 유지보수 용이
단점
미래 예측 실패미래에 필요한 기능을 예측하지 못할 수 있음
리팩토링 필요나중에 필요한 기능을 추가하기 위해 리팩토링이 필요할 수 있음
과도한 단순화현재 요구사항에만 집중하여 전체적인 시스템 설계 간과 가능성
적용 시 고려사항
요구사항 분석현재와 미래의 요구사항을 신중하게 분석
균형 유지현재 요구사항과 미래 확장 가능성 사이의 균형 유지
점진적 설계필요에 따라 기능을 점진적으로 추가하는 방식으로 설계
관련 개념
KISS 원칙Keep It Simple, Stupid (단순하게 유지하라, 멍청아)
DRY 원칙Don't Repeat Yourself (반복하지 마라)
최소 실행 가능 제품 (MVP)Minimum Viable Product
출처
론 제프리스You're NOT gonna need it!
존 카맥트윗

2. 배경

YAGNI는 "작동할 수 있는 가장 단순한 것을 하라"(DTSTTCPW, Do The Simplest Thing That Could Possibly Work)는 XP 원칙에 기반한다.[5][3]

2. 1. XP와 YAGNI

XP는 변화하는 요구사항에 빠르게 대응하고, 개발 생산성을 높이기 위한 실천 방법들을 제시한다. YAGNI는 이러한 XP의 실천 방법 중 하나로, 코드의 복잡성을 줄이고 개발 시간을 단축하는 데 기여한다. YAGNI는 "작동할 수 있는 가장 단순한 것을 하라"(DTSTTCPW)는 XP 원칙에 기반한다.[5][3] 이는 지속적인 코드 리팩토링, 지속적인 자동화된 단위 테스트, 지속적인 통합과 같은 여러 다른 실천과 함께 사용하기 위한 것이다. 지속적인 리팩토링 없이 사용하면 체계적이지 못한 코드와 대대적인 재작업으로 이어질 수 있는 기술 부채를 야기할 수 있다.

2. 2. 다른 XP 실천 방법과의 관계

YAGNI는 "작동할 수 있는 가장 단순한 것을 하라"(DTSTTCPW)는 XP 실천 원칙이다. 이는 지속적인 코드 리팩토링, 지속적인 자동화된 단위 테스트, 지속적인 통합과 같은 여러 다른 실천과 함께 사용하기 위한 것이다. 지속적인 리팩토링 없이 사용하면 기술 부채로 알려진, 체계적이지 못한 코드와 대대적인 재작업으로 이어질 수 있다. YAGNI가 보조 실천에 의존하는 것은 XP의 원래 정의의 일부이다.

3. YAGNI 원칙을 옹호하는 이유

YAGNI 원칙을 지지하는 사람들은 다음과 같은 이유를 제시한다.


  • 개발자의 시간과 능력은 단순히 코드를 작성하는 것보다 현실의 문제를 해결하는 데 집중해야 한다.
  • 결국 필요하지 않을 수도 있는 기능을 구현하는 데 시간을 낭비하지 않아야 하며, 다른 사람들이 그 코드를 읽는 데 시간을 낭비하게 해서도 안 된다.
  • 코드를 빠르게 구현하고 버그를 줄이는 가장 좋은 방법은 코드를 적게 작성하는 것이다.

3. 1. 효율성 및 생산성 향상

YAGNI 원칙을 옹호하는 사람들은 다음과 같은 이유로 효율성 및 생산성 향상을 주장한다.

  • 나중에 사용할 것이라고 예측하여 만든 기능은 실제로 10% 정도밖에 사용되지 않는다. 따라서 이에 소요된 시간의 90%는 낭비된다.
  • 불필요한 기능은 작업 속도를 늦추고 리소스를 낭비한다.
  • 예상치 못한 변경에 대비하기 위해서는 설계를 단순하게 하는 것이 도움이 된다. 그러나 필요 이상의 기능을 추가하면 설계가 복잡해진다.

3. 2. 개발 시간 단축 및 버그 감소

코드를 빠르게 구현하는 가장 좋은 방법은 불필요한 코드를 작성하지 않는 것이다. 또한, 버그를 줄이는 가장 좋은 방법도 코드를 적게 작성하는 것이다. 결국 필요하지 않은 기능에 투입된 시간, 코드를 읽는 데 소요된 시간, 기능이 차지하는 공간 등 모든 것이 낭비될 수 있다.

3. 3. 현실 문제에 집중

개발자의 시간과 능력은 단순히 코드를 작성하는 데 쓰이기보다는, 현실의 문제를 해결하는 데 집중되어야 한다.

참조

[1] 트윗 It is hard for less experienced developers to appreciate how rarely architecting for future requirements / applications turns out net-positive. https://t.co/lusGdzkfd3 2021-06-18
[2] 트윗 It is hard for less experienced developers to appreciate how rarely architecting for future requirements / applications turns out net-positive. https://t.co/lusGdzkfd3 2021-06-18
[3] 서적 Object-oriented & classical software engineering https://books.google[...]
[4] 서적 Extreme Programming Installed https://books.google[...]
[5] 서적 Extreme Programming examined https://books.google[...]
[6] 서적 Extreme Programming and Agile Methods – XP/Agile Universe 2004: 4th Conference on Extreme Programming and Agile Methods https://archive.org/[...] Springer
[7] 웹인용 You're NOT gonna need it! http://ronjeffries.c[...] 1998-04-04
[8] 서적 Refactoring: Improving the Design of Existing Code https://books.google[...] Addison-Wesley Professional 1999-07-08
[9] 서적 Lean Software Development: An Agile Toolkit https://books.google[...]
[10] 서적 Design Patterns in Ruby http://www.informit.[...]



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com