AHA(Avoid Hasty Abstractions)는 성급한 추상화를 피하자는 프로그래밍 원칙이다. 켄트 C. 도즈(Kent C. Dodds)는 [[DRY]]와 [[WET]]를 경직된 규칙으로 쓰는 대신, 실제 사용 사례를 충분히 살핀 뒤 공통 구조를 정하자고 설명한다. 코드를 얼마나 줄였는지보다 다음 변경을 감당할 수 있는지가 판단 기준이다. ([AHA Programming](https://kentcdodds.com/blog/aha-programming)) ## 합치기 전에 기다리기 - 예를 들어 서로 다른 작가의 웹사이트를 하나의 틀로 만들기 전에 작품 목록, 글, 이미지가 어떻게 달라지는지 비교해보자. 비슷한 첫 화면만 보고 모든 페이지를 같은 구조로 묶으면 예외 설정이 늘어날 수 있다. - 이미 합친 코드가 맞지 않는다면 다시 나눌 수도 있다. 샌디 메츠(Sandi Metz)는 잘못된 추상화에서 벗어나는 방법으로 코드를 각 사용처에 돌려놓고 필요 없는 부분을 덜어내는 절차를 설명한다. ([잘못된 추상화](https://sandimetz.com/blog/2016/1/20/the-wrong-abstraction)) - [[가역성]]을 생각하며 [[추상화를 미룬 기록]]을 남겨보자. 현재의 차이, 나중에 다시 볼 조건, 이미 공유해야 하는 규칙을 구별해 적으면 기다리는 이유가 분명해진다. ## 기타 등등 - 도즈는 AHA라는 약어를 셰어 스칼릿(Cher Scarlett)에게서 얻었다고 밝힌다. 발음도 무언가를 발견했을 때 내는 ‘아하!’를 의도한다. [출처](https://kentcdodds.com/blog/aha-programming) - 도즈는 다른 회사의 코드를 검토하며 jsinspect로 복사된 부분을 찾아 추상화할 기회를 살핀 경험도 적었다. 이 글은 중복 제거 자체를 포기하자는 제안은 아니다. [출처](https://kentcdodds.com/blog/aha-programming) #원칙 #프로그래밍 #설계