250. YAGNI (You Aren't Gonna Need It) 원칙 - 오버 엔지니어링 방지 애자일 설계 익스트림 프로그래밍(XP) 소프트웨어 공학 클린 코드
핵심 인사이트: (249번 KISS의 완벽한 단짝) 사장님이 "쇼핑몰에서 옷 팔 수 있게 결제 기능 만들어"라고 지시했다. 개발자가 키보드를 치다 상상의 나래를 펼친다. "음, 내년에 옷 말고 비행기 티켓도 팔지 않을까? 내후년엔 우주여행 티켓도 팔 수도 있잖아! 그럼 우주 환율 계산기도 미리 만들어두고, 화성 시차 적용 모듈도 지금 한 번에 다 코딩해 놔야겠다!" 3달이 걸려 우주 최강 결제 모듈이 나왔지만, 회사는 그 3달 동안 옷을 한 벌도 못 팔아서 망했다. 게다가 우주여행 티켓은 10년이 지나도 팔지 않았다. XP 창시자들이 소리쳤다. "야!! You Aren't Gonna Need It (너 그거 평생 쓸 일 없어 ㅆㅂ)!! 제발 내년에 쓸지도 모르는 가상의 기능(미래의 요구사항)을 지레짐작해서 미리 코딩해 두지 마!! 네가 미리 짠 그 화성 환율 코드 수천 줄은, 당장 오늘 회사 메모리만 처먹고 나중에 스파게티 버그만 유발하는 거대한 우주 쓰레기일 뿐이야!! 무조건 '지금 당장 100% 필요한' 딱 그 기능 1개만 짜고 빨리 퇴근해!!" 설레발 코딩의 싹을 댕강 잘라버리는 극단적 실용주의, YAGNI 원칙이다.
Ⅰ. 개발자의 몹쓸 불치병: 예언가 신드롬
- 개발자는 요구사항이 나중에 바뀌면 코드를 다 엎어야 하는 게 끔찍하게 싫습니다(수정의 공포).
- 그래서 **'미리 대비하자(Future-proofing)'**는 강박에 빠져, 나중에 편하려고 당장 쓰지도 않을 거대한 인터페이스를 파고 가짜 함수들을 수백 개 만들어 둡니다. (이른바 오버 엔지니어링)
- 비극의 결말: 시장은 변합니다. 내년에 추가될 줄 알았던 기능은 사장님이 까먹어서 평생 안 쓰입니다. 결국 그 '미리 짜둔 코드들'은 아무도 건드리지 못하고 방치되어, 코드를 읽는 사람을 미치게 만드는 암덩어리 찌끄러기(Dead Code)로 남습니다.
Ⅱ. YAGNI (You Aren't Gonna Need It)의 개념 🌟
- 개념: 익스트림 프로그래밍(XP)과 애자일(Agile) 선언문에서 튀어나온 절대 실용주의 룰.
- "현재 명확하게 요구되지 않은 기능(미래에 필요할지도 모른다고 생각되는 추측성 기능)은 절대로 미리 소스코드에 구현해서 쑤셔 넣지 마라!"
- 오직 오늘 당장 살아남기 위해 필요한 명시적 요구사항에만 100% 미치도록 집중하라는 철학입니다.
Ⅲ. YAGNI가 세상을 지배하는 이유 (애자일의 심장) 🌟 핵심 🌟
1. 시간(Time)과 돈(Cost)의 절대적 절약
- 쓸데없는 우주여행 결제 기능을 짜느라 버린 1달의 시간은 회사의 월급을 불태운 것입니다. YAGNI를 지키면 당장 옷 파는 핵심 기능만 1주일 만에 완성해서 시장에 출시(Time-to-Market)하고 돈을 벌 수 있습니다.
2. 극강의 유연함 확보 (모순점의 극복)
- "어? 나중에 기능 추가할 때 뼈대 다 부숴야 하잖아요?"
- 아닙니다! 244번 OCP(개방 폐쇄) 원칙과 243번 SRP(단일 책임)로 뼈대를 예쁘게 레고 블록처럼 짜뒀다면, 나중에 진짜 우주여행 티켓 기능이 필요해진 '바로 그날'에, 그냥 레고 블록 하나 찰칵 추가해서 끼우면 끝납니다.
- 굳이 미리 쓰레기를 붙여놔서 레고 전체를 무겁게 만들 이유가 단 1%도 없는 것입니다. (리팩토링의 힘을 믿으라는 뜻입니다.)
Ⅳ. 삼위일체 (KISS, DRY, YAGNI) 🌟
이 3대장은 코드 리뷰할 때 선배들이 가장 많이 입에 올리는 단골 멘트 3대장입니다.
- DRY (248번): 똑같은 코드 두 번 쓰지 마! ➜ '코드 복붙 낭비' 방지
- KISS (249번): 쓸데없이 디자인 패턴 떡칠해서 꼬아놓지 마! ➜ '설계 복잡성' 방지
- YAGNI (250번): 쓸데없이 미래 기능 지레짐작해서 미리 짜지 마! ➜ '불필요한 코드 추가' 방지
📢 섹션 요약 비유: YAGNI(You Aren't Gonna Need It) 원칙은 한라산을 등반하려는 초보 등산객에게 **'북극 탐험용 썰매와 우주복 배낭 금지법'**입니다. 초보 등산객(오버 엔지니어링 개발자)은 한라산에 가면서 상상의 나래를 펼칩니다. "음, 가다가 만약 눈보라를 만나면 썰매가 필요하겠지? 혹시라도 산 정상에서 로켓을 타고 우주로 갈 수도 있으니까 우주복도 챙겨야겠다!" 이 멍청이는 100kg짜리 가방(미래의 추측성 쓰레기 코드)을 메고 산에 오르다 입구에서 무거워서 쓰러져 죽습니다. 산악 대장(XP 마스터)이 가방을 탈탈 털어버리며 소리칩니다. "야 이 바보야!! 너 그거 평생 한라산에서 쓸 일 없어 ㅆㅂ(YAGNI)!!" 썰매와 우주복을 다 쓰레기통에 던져버리고 딱 오늘 마실 생수 1병과 아이젠(당장 필요한 핵심 로직)만 쥐여줍니다. 몸이 미치도록 가벼워진 등산객은 한라산 정상을 빛의 속도로 찍고 살아남습니다. 나중에 만약 진짜 우주에 가야 할 일이 생긴다면, 그때 우주 기지(새로운 객체 확장)에 가서 우주복을 챙겨입으면 그만입니다. 일어날지 안 일어날지도 모르는 미래의 망상 때문에 현재의 코드를 뚱뚱하고 무겁게 망치는 죄악을 사형시키는 극단적 군더더기 절단술입니다.