logo

YAGNI 원칙(You ARE'T Gonna Need It)이란 무엇입니까?

야그니 약자 당신은 그것을 필요로하지 않을 것입니다. 개발자가 현재 요구 사항에 필요한 기능만 구현하고 미래에 필요할 수 있는 추가 기능을 추가해서는 안 된다는 것이 소프트웨어 개발의 원칙입니다. 이 원칙은 불필요한 기능을 추가하면 복잡성이 증가하고 개발 시간이 길어지며 잠재적으로 더 많은 버그가 발생할 수 있다는 생각에 기반을 두고 있습니다.

YAGNI 원칙은 다음과 밀접한 관련이 있습니다. 키스 디자인의 단순성과 불필요한 복잡성을 피하는 것을 옹호하는 원칙(Keep It Simple, Stupid)입니다. 두 원칙 모두 개발자가 잠재적인 미래 요구 사항을 예측하고 수용하려고 노력하기보다는 현재 요구 사항을 충족하는 가장 간단한 솔루션을 제공하는 데 집중하도록 권장합니다.



YAGNI 교장이란 무엇입니까?

내용의 테이블

YAGNI란 무엇인가요?

YAGNI는 개발자가 명시적으로 필요할 때까지 시스템에 기능을 추가하지 않도록 권장하는 원칙입니다. 불필요한 기능을 추가하면 복잡성이 증가하고 개발 시간이 길어지며 잠재적으로 더 많은 버그가 발생할 수 있다는 전제를 기반으로 합니다. 대신 개발자는 현재 요구 사항을 충족하는 가장 간단한 솔루션을 제공하는 데 집중해야 합니다.



YAGNI는 익스트림 프로그래밍에서 파생되었습니다. .

개발자가 YAGNI 원칙을 따라야 하는 이유는 무엇입니까?

개발자는 다음과 같은 이유로 YAGNI 원칙을 따라야 합니다.

  • 건축 비용: 빌드 비용은 기능이나 솔루션을 만드는 데 소요되는 시간, 노력 및 리소스의 양입니다. 계획과 코딩부터 테스트까지 모든 것이 포함됩니다. 필요하지 않은 것으로 판명된 것을 구축하는 경우 구축 비용은 해당 제품을 만드는 데 투자한 금액을 나타냅니다.
  • 지연 비용: 지연으로 인한 비용은 기능이나 솔루션을 즉시 제공하지 않음으로 인해 놓친 기회 또는 경제적 영향입니다. 덜 중요한 기능에 시간을 소비하면 더 중요한 기능의 구현이 지연될 수 있습니다. 이러한 지연으로 인해 수익이나 기타 혜택을 얻을 수 있는 기회를 놓칠 수 있습니다.
  • 운반 비용: 휴대 비용은 소프트웨어의 특정 기능으로 인해 발생하는 지속적인 어려움과 추가 작업입니다. 기능이 복잡해지면 소프트웨어의 다른 부분에서 작업하기가 더 어려워지고 시간과 노력이 추가로 필요할 수 있습니다. 앞으로 나아가려고 노력하면서 여분의 무게를 짊어지는 것과 같습니다.
  • 수리 비용: 기술 부채라고도 하는 수리 비용은 기능 개발 중 발생한 실수, 버그 또는 잘못된 선택을 수정하는 데 드는 지속적인 비용입니다. 나중에 조정이 필요한 것을 구축하는 경우 해당 문제를 해결하려면 부채를 갚는 것과 마찬가지로 추가 시간과 리소스가 필요합니다.

개발자가 YAGNI 원칙을 따라야 하는 이유



리눅스 파일 시스템

YAGNI가 왜 중요한가요?

YAGNI는 소프트웨어 개발을 집중적이고 효율적으로 유지하는 데 도움이 되기 때문에 중요합니다. 필요한 기능만 구현함으로써 개발자는 불필요한 기능에 시간과 리소스를 낭비하는 것을 피할 수 있습니다. 이를 통해 개발 시간이 단축되고 복잡성이 줄어들며 코드베이스의 유지 관리가 더욱 용이해집니다.

YAGNI의 아이디어

개발자로서 YAGNI를 사용한다는 것은 작업의 집중력과 효율성을 유지하기 위한 실용적인 가이드를 갖는 것과 같습니다.

개발자를 위한 YAGNI 교장

1. 필요한 요구 사항을 얻으십시오

프로젝트에 필요한 모든 항목을 필수 항목으로 분류하고 기다릴 수 있습니다. 이는 무엇을 해야 할지 정확히 아는 데 도움이 됩니다. 종이에 적든 화면에 입력하든 목록을 가지고 있으면 체계적으로 정리할 수 있습니다.

2. 팀과 논의

그 후에는 팀과 대화할 시간입니다. 당신의 계획과 목표를 그들과 공유하십시오. 이를 통해 모든 사람이 동일한 내용을 이해하고 수행해야 할 작업을 이해할 수 있습니다. 이는 팀 주장이 되어 모든 사람이 동일한 게임을 플레이하도록 하는 것과 같습니다.

3. 솔루션에 대한 간단한 계획 분석

이제 실제 작업을 계획할 때는 단순하게 유지하세요. 큰 목표를 작은 작업으로 나누세요. 이렇게 하면 압도당하는 것을 방지하고 정말 중요한 것에 집중할 수 있습니다. 프로젝트에 대한 단계별 로드맵을 구축하는 것과 같다고 생각하세요.

4. 해결방안에 맞지 않으면 거절하세요

때로는 팀에서 새로운 아이디어가 떠오르거나 추가 사항을 추가하고 싶을 수도 있습니다. 이러한 아이디어는 멋질 수도 있지만 아주 작은 개선이 아니라면 거절할 준비가 되어 있어야 합니다. 거절하는 것은 어려울 수 있지만, 그렇게 하면 궤도에서 벗어나 마감 기한을 놓치는 일이 방지됩니다.

자바의 소수 프로그램

5. 진행 상황을 기록해 보세요.

당신이 한 일을 기록해 두십시오. 이는 게임에서 점수를 기록하는 것과 같습니다. 이를 통해 얼마나 멀리 왔는지, 올바른 방향으로 가고 있는지 확인하는 데 도움이 됩니다. 이 프로세스를 관리하는 데 도움이 되는 도구는 개발자를 위한 점수판과 같으며, 개발자가 올바른 방향을 유지하고 고객에게 실제로 필요한 것을 제공할 수 있도록 도와줍니다.

YAGNI 대 다른 원칙

YAGNI(You Are n't Gonna Need It)는 필요할 때까지 기능을 추가하지 말라고 조언하는 소프트웨어 개발 원칙입니다. 이는 여러 면에서 다른 원칙과 대조됩니다.

  1. KISS(단순하게, 바보처럼) : KISS는 디자인의 단순함을 옹호하고 불필요한 복잡성을 피하는 원칙입니다. YAGNI는 복잡성을 증가시킬 수 있는 불필요한 기능을 추가하지 않도록 조언하여 KISS를 보완합니다.
  2. DRY(반복하지 마세요) : DRY는 코드 재사용과 중복 방지를 옹호하는 원칙입니다. DRY가 중복 코드를 제거하는 데 중점을 둔다면 YAGNI는 불필요한 기능을 방지하는 데 중점을 둡니다.
  3. 단단한 : SOLID는 모듈식, 유지 관리 및 확장 가능한 코드를 촉진하는 객체 지향 설계에 대한 일련의 원칙입니다. SOLID 원칙은 코드의 디자인과 아키텍처에 중점을 두는 반면, YAGNI는 코드의 기능에 중점을 둡니다.
  4. TDD(테스트 중심 개발) : TDD는 코드를 작성하기 전에 테스트를 작성하는 개발 프로세스입니다. TDD는 개발 프로세스를 추진하기 위한 테스트 작성에 중점을 두고 있는 반면, YAGNI는 불필요한 기능을 피하는 데 중점을 둡니다.
  5. 기민한 : Agile은 협업, 유연성 및 고객 피드백을 강조하는 소프트웨어 개발에 대한 일련의 원칙과 관행입니다. YAGNI는 개발자가 가장 중요한 기능을 먼저 제공하는 데 집중하고 변화하는 요구 사항에 적응하도록 장려하므로 Agile 원칙으로 볼 수 있습니다.

다음은 YAGNI의 측면과 다른 원칙이 이를 해결하는 방법을 기반으로 YAGNI를 다른 소프트웨어 개발 원칙과 비교한 것입니다.

YAGNI의 모습 다른 원칙이 이를 해결하는 방법 YAGNI가 이를 해결하는 방법
간단 KISS(Keep It Simple, Stupid)와 같은 다른 원칙도 디자인의 단순성과 불필요한 복잡성 방지를 옹호합니다. YAGNI는 복잡성을 증가시킬 수 있는 불필요한 기능을 추가하지 않도록 조언하여 KISS를 보완합니다.
능률 Agile 및 Lean 소프트웨어 개발과 같은 다른 원칙은 고객에게 가치를 제공하고 낭비를 제거하는 것을 강조합니다. YAGNI는 현재 요구 사항을 충족하는 가장 간단한 솔루션을 제공하는 데 중점을 두고 있으며, 이를 통해 개발 주기를 단축하고 리소스를 보다 효율적으로 사용할 수 있습니다.
유연성 Agile 및 Scrum과 같은 다른 원칙은 협업, 유연성 및 변화하는 요구 사항에 대한 적응을 강조합니다. YAGNI는 개발자가 가장 중요한 기능을 먼저 제공하고 변화하는 요구 사항에 적응하는 데 집중할 것을 권장합니다.
위험 감소 TDD(테스트 중심 개발) 및 CI(지속적 통합)와 같은 다른 원칙은 현재 요구 사항을 충족하는 고품질 코드를 제공하는 데 중점을 둡니다. YAGNI는 코드베이스에 버그 및 기타 문제가 발생할 위험을 줄일 수 있도록 불필요한 기능을 추가하지 말 것을 권고합니다.
사용자 중심 Agile 및 Lean 소프트웨어 개발과 같은 다른 원칙은 고객에게 가치를 제공하는 데 중점을 둡니다. YAGNI는 가장 중요한 기능을 먼저 제공하는 데 초점을 맞춰 소프트웨어가 사용자의 요구와 기대를 충족하도록 보장합니다.
비용 절감 Agile 및 Lean 소프트웨어 개발과 같은 다른 원칙은 낭비를 제거하고 고객에게 가치를 제공하는 데 중점을 둡니다. YAGNI는 불필요한 기능을 피하고 가장 중요한 기능을 먼저 제공하는 데 집중함으로써 비용 절감을 가져올 수 있습니다.
유지 관리성 SOLID(단일 책임, 개방/폐쇄, Liskov 대체, 인터페이스 분리, 종속성 반전)와 같은 다른 원칙은 코드의 설계 및 아키텍처에 중점을 둡니다. YAGNI는 코드베이스를 단순하고 집중적으로 유지하여 이해하고 유지 관리하기 쉽게 만듭니다.

전반적으로 YAGNI는 현재 요구 사항을 충족하는 가장 간단한 솔루션을 제공하고 불필요한 기능을 피하는 데 중점을 두어 다른 소프트웨어 개발 원칙을 보완합니다.

YAGNI의 예

다음은 YAGNI를 적용하는 방법에 대한 몇 가지 예입니다.

  1. 기능 크리프 방지 : 개발팀이 웹 애플리케이션을 개발 중입니다. 처음에는 사용자가 맞춤형 아바타를 만들고 공유할 수 있는 기능을 포함할 계획입니다. 그러나 이 기능을 구현하는 데 필요한 시간과 리소스를 고려한 후 사용자로부터 필요하다는 피드백을 받을 때까지 연기하기로 결정했습니다.
  2. 복잡성 감소 : 개발자는 사용자가 운동 루틴을 추적할 수 있는 모바일 앱을 개발 중입니다. 처음에는 사용자의 피트니스 목표에 따라 개인화된 운동 계획을 자동으로 생성하는 기능을 포함할 계획입니다. 그러나 이 기능 구현의 복잡성과 앱 성능에 대한 잠재적인 영향을 고려한 후, 그들은 사용자가 수동으로 자신만의 운동 계획을 만들 수 있는 더 간단한 접근 방식을 고수하기로 결정했습니다.
  3. 자원 할당 : 개발팀이 전자상거래 플랫폼을 개발 중입니다. 그들은 처음에는 사용자가 위시리스트를 만들고 친구들과 공유할 수 있는 기능을 포함할 계획입니다. 그러나 프로젝트에 사용할 수 있는 제한된 시간과 리소스를 고려한 후 플랫폼의 성공에 더 중요한 다른 기능에 집중하기로 결정했습니다.
  4. 범위 관리 : 개발팀이 클라이언트를 위한 소프트웨어 프로젝트를 진행하고 있습니다. 클라이언트는 처음에 프로젝트 성공에 필요할 것으로 생각되는 몇 가지 추가 기능을 요청합니다. 그러나 프로젝트 예산과 일정을 고려한 후 개발 팀은 가장 중요한 기능만 포함하도록 프로젝트 범위를 제한하기로 결정했습니다.
  5. 피드백 중심 개발 : 개발팀이 새로운 소프트웨어 제품을 개발 중입니다. 처음에는 사용자가 제품 성능에 대한 피드백을 제공할 수 있는 기능을 포함할 계획입니다. 그러나 제품의 유용성에 대한 잠재적인 영향과 이 기능을 구현하는 데 필요한 시간을 고려한 후 사용자로부터 필요하다는 피드백을 받을 때까지 이 기능을 연기하기로 결정했습니다.

YAGNI의 장점

소프트웨어 개발에서 YAGNI(You Are n't Gonna Need It)의 이점은 다양하며 개발 프로세스, 최종 제품의 품질 및 프로젝트의 전반적인 성공에 상당한 영향을 미칠 수 있습니다. 주요 이점은 다음과 같습니다.

  • 더 빠른 개발 : 현재 필요한 것에만 집중함으로써 개발자는 결코 사용하지 않을 기능에 시간을 낭비하는 것을 피할 수 있습니다. 이를 통해 개발 주기가 빨라지고 리소스를 보다 효율적으로 사용할 수 있습니다.
  • 간단 : 불필요한 기능은 코드베이스를 복잡하게 만들어 유지 관리 및 이해를 더욱 어렵게 만듭니다. YAGNI는 코드베이스를 단순하고 집중적으로 유지하여 개발자가 더 쉽게 작업할 수 있도록 도와줍니다.
  • 유연성 : 불필요한 기능을 피함으로써 개발자는 코드베이스를 유연하게 유지하고 변경에 적응할 수 있습니다. 이는 요구 사항이 자주 변경될 수 있는 빠르게 변화하는 환경에서 특히 중요할 수 있습니다.
  • 위험 감소 : 불필요한 기능으로 인해 코드베이스에 버그 및 기타 문제가 발생할 수 있습니다. 이러한 기능을 피함으로써 개발자는 코드베이스에 버그 및 기타 문제가 발생할 위험을 줄일 수 있습니다.
  • 사용자 중심 : YAGNI는 최종 사용자에게 가치를 전달하는 데 집중할 수 있도록 도와줍니다. 사용자에게 필요한 기능만 구현함으로써 개발자는 소프트웨어가 사용자의 요구와 기대를 충족하는지 확인할 수 있습니다.
  • 비용 절감 : 불필요한 기능을 방지함으로써 개발자는 해당 기능을 구현하고 유지 관리하는 데 소요되는 시간과 리소스를 절약할 수 있습니다. 이는 조직의 비용 절감으로 이어질 수 있습니다.
  • 유지보수성 향상 : 코드베이스가 단순할수록 이해하고 유지 관리하기가 더 쉬워 개발자가 더 쉽게 변경하고 버그를 수정할 수 있습니다.
  • 더 나은 사용자 경험 : 개발자는 가장 중요한 기능을 먼저 제공하는 데 집중함으로써 사용자가 필요한 기능을 더 빨리 얻을 수 있도록 하여 전반적인 사용자 경험을 향상시킬 수 있습니다.

결론

YAGNI 원칙은 소프트웨어 개발의 다양한 측면에서 유용할 수 있습니다. 이는 단순성을 촉진하고 불필요한 복잡성을 줄이며 팀이 필수 기능을 제공하는 데 집중할 수 있도록 도와줍니다. YAGNI를 고려함으로써 개발자는 생산성, 유지 관리성 및 전반적인 프로젝트 성공을 향상시킬 수 있습니다. 그러나 YAGNI를 선견지명이나 건축적 고려 사항을 무시하는 변명으로 오해하지 말고 균형을 맞추는 것이 중요합니다.

지도 C++에서 찾기

YAGNI FAQ

Q1. YAGNI에 대한 비판은 무엇입니까?

어떤 사람들은 YAGNI에 단점이 있다고 말합니다. 그들은 지금 당장 필요한 것만 생각하고 잠재적인 미래 요구 사항을 무시하면 나중에 새로운 요구 사항이 나타날 때 많은 작업을 다시 실행해야 할 수도 있다고 주장합니다.

Q2. YAGNI 규칙은 무엇입니까?

당신은 그것을 필요로하지 않을 것입니다. YAGNI는 프로그래머가 필요할 때까지 추가 기능을 추가해서는 안 된다는 XP(익스트림 프로그래밍)에서 파생된 소프트웨어 개발 원칙입니다.

Q3. YAGNI 원칙을 지지하는 주장은 무엇입니까?

기능 크리프(feature creep)는 개발자가 앞으로 거의 사용하지 않을 기능을 사용하지 않음을 의미합니다.

Q4. SOLID와 YAGNI의 차이점은 무엇인가요?

SOLID는 특히 단일 책임 원칙(SRP)을 통해 코드가 향후 어떻게 변경될 수 있는지에 대해 아주 작은 아이디어라도 가질 수 있기를 기대합니다. 이는 마치 어떤 것을 예측할 수 있다고 희망하는 것과 같습니다. 반면에 YAGNI는 대부분의 경우 코드가 미래에 어디로 향할지 모른다고 가정합니다. 그것은 우리의 예측 능력에 대해 약간 의심하는 것과 같습니다.