"그거 필요 없을 거야(You Aren't Gonna Need It)." 실제로 필요해지기 전까지 기능이나 확장 지점을 만들지 말라는 XP(Extreme Programming)의 원칙이다.
- 미래를 위해 미리 넣은 매개변수·훅·추상 클래스(유연성 메커니즘, Flexibility Mechanism)는 상당수가 결국 쓰이지 않거나, 막상 요구가 오면 모양이 맞지 않아 오히려 고치기 어렵게 만든다
- 지금 JSON(JavaScript Object Notation) 내보내기만 필요하면 JSON만 만든다. XML(Extensible Markup Language)이 필요해지는 날 추가한다
- 추측성 일반화(Speculative Generality) 냄새: 하는 일 없는 추상 클래스, 쓸데없는 위임, 한 번도 쓰지 않은 매개변수, 테스트에서만 쓰이는 함수. 계층 합치기·인라인·죽은 코드 제거로 걷어 낸다
전제 조건
YAGNI는 "나중에 바꿔도 된다"는 자신감이 있을 때만 성립한다. 좋은 테스트와 CI(Continuous Integration), 그리고 리팩터링 습관이 있어야 필요할 때 구조를 고칠 수 있다. 그래서 YAGNI가 아키텍처를 아예 생각하지 말라는 뜻은 아니다. 문제를 더 깊이 이해했을 때 다루는 편이 낫다는 것이다. 파울러는 YAGNI가 진화적 설계(Evolutionary Design)에 기대는 동시에 그것을 가능하게 한다고 설명한다.
수많은 유연성 메커니즘을 갖춘 시스템보다 단순한 시스템이 바꾸기 훨씬 쉽다. KISS 원칙, 심플 디자인, 세컨드 시스템 효과와 같은 방향이다.
출처: 『리팩터링 2판』 마틴 파울러 (원서 Refactoring, 2nd Edition) · Laws of Software Engineering: YAGNI (You Aren't Gonna Need It) · Martin Fowler: Yagni · Refactoring.Guru: Speculative Generality