[一日30分 인생승리의 학습법] 잘못된 추상화보다 중복을 선호하라 (2016) 

 

29P by GN⁺ | ★ favorite | 댓글 6개
  • 잘못된 추상화보다 코드 중복이 훨씬 싸며, 성급한 공통화가 장기 유지보수 비용을 키운다고 봄
  • 처음에는 합리적이던 추출도 요구사항이 조금씩 달라지면 매개변수와 조건문이 붙어 원래 의도를 흐림
  • 공통 추상화가 여러 아이디어를 떠안기 시작하면 코드는 조건 중심 절차로 변하고, 새 기능을 넣을수록 더 깨지기 쉬워짐
  • 기존 코드에 들인 노력을 지키려는 매몰비용 오류를 경계하고, 필요하면 추상화를 호출부로 다시 인라인해 실제로 필요한 코드만 남겨야 함
  • 잘못된 추상화가 드러났다면 중복을 다시 도입해 현재 요구사항의 공통점을 새로 관찰하고, 그다음에 다시 추출하는 편이 더 빠름

잘못된 추상화가 만들어지는 흐름

  • duplication is far cheaper than the wrong abstraction”라는 문장은 RailsConf 2014 발표의 일부였지만 이후에도 계속 회자됨
  • 흔한 실패 경로는 다음과 같음
    • 개발자 A가 중복을 발견함
    • 중복을 메서드나 클래스로 추출하고 이름을 붙여 새 추상화를 만듦
    • 호출부의 반복 코드를 새 추상화 호출로 대체함
    • 시간이 지나 거의 맞지만 완전히 같지는 않은 새 요구사항이 등장함
    • 개발자 B가 기존 추상화를 유지하려고 매개변수를 추가하고, 값에 따라 다른 경로를 타는 조건문을 넣음
    • 이후 새 요구사항마다 매개변수와 조건문이 늘어나며 코드 이해가 점점 어려워짐
  • 한 번 만들어진 코드는 보존해야 할 투자처럼 보이기 쉬움
    • 이미 들인 노력을 아깝게 여기는 심리가 작동함
    • 코드가 복잡하고 이해하기 어려울수록, 그만큼 중요하고 오래 걸렸을 것처럼 느껴져 버리기 어려워짐
    • 이는 매몰비용 오류와 연결됨

중복으로 되돌아가 다시 추출하기

  • 잘못된 추상화 위에서 새 요구사항을 계속 구현하면 공유 코드는 조건문 중심으로 변하고, 기능을 추가할수록 더 불안정해짐
  • 이때 빠른 길은 더 밀어붙이는 것이 아니라 뒤로 돌아가는 것
    • 추상화된 코드를 각 호출부에 다시 인라인해 중복을 재도입함
    • 각 호출부에서 전달하던 매개변수를 기준으로 실제 실행되는 코드만 확인함
    • 해당 호출부에 필요 없는 코드를 삭제함
  • 인라인 과정은 추상화와 조건문을 함께 제거하고, 각 호출부를 자신에게 필요한 코드만 가진 상태로 줄임
  • 같은 추상화를 호출하는 것처럼 보였던 코드도 실제로는 각 호출부가 상당히 고유한 코드 경로를 실행하고 있었을 수 있음
  • 이전 추상화를 완전히 제거한 뒤에야 중복을 다시 관찰하고, 현재 요구사항에 맞는 새 추상화를 추출할 수 있음
  • 매개변수와 조건 경로가 공유 코드에 계속 추가되고 있다면 그 추상화는 더 이상 맞지 않을 가능성이 큼
    • 처음에는 맞는 추상화였을 수 있음
    • 요구사항이 바뀌면서 더 이상 같은 형태로 유지하기 어려워졌을 수 있음
  • 잘못된 추상화에서는 중복을 다시 도입하는 일이 후퇴가 아니라 더 나은 전진이 됨

 

[출처] https://news.hada.io/topic?id=30705&utm_source=weekly&utm_medium=email&utm_campaign=202626

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

 

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
1238 “AI 부업으로 돈 번다는 말, 거짓말입니다” 자동화 ‘딸깍’ 믿다간 망하는 진짜 이유 (f. 이시한 성신여자대학교 교수) 졸리운_곰 2026.07.24 38
1237 [발버둥 청년] AI로 월 천만 원? 제가 직접 해본 현실은 달랐습니다 졸리운_곰 2026.07.24 49
1236 [一日30分 인생승리의 학습법] 이봐, 신입, 우린 당신에게 주어진 일이나 끝내라고 채용한 게 아니야 졸리운_곰 2026.07.23 43
» [一日30分 인생승리의 학습법] 잘못된 추상화보다 중복을 선호하라 (2016) 졸리운_곰 2026.06.29 67
1234 [一日30分 인생승리의 학습법] 소프트웨어 공학의 법칙들 졸리운_곰 2026.04.26 73
1233 [一日30分 인생승리의 학습법] 기술 부채, 인지 부채, 의도 부채 졸리운_곰 2026.04.25 65
1232 [一日30分 인생승리의 학습법] 어떤 종류의 앱이 가장 많은 돈을 벌까요? file 졸리운_곰 2026.03.08 105
1231 [一日30分 인생승리의 학습법] [알아봅시다] 50대 시니어 개발팀장이 읽으면 좋은 추천도서 [두번째] 졸리운_곰 2025.12.28 132
1230 [一日30分 인생승리의 학습법] [알아봅시다] 50대 시니어 개발팀장이 읽으면 좋은 추천도서 [첫번째] 졸리운_곰 2025.12.28 135
1229 [一日30分 인생승리의 학습법] [알아봅시다] Google에서 14년간 얻은 21가지 교훈  졸리운_곰 2025.12.15 126
1228 [一日30分 인생승리의 학습법] 바이브코딩보다 훨씬 중요함 | 바이브코딩 직전까지의 기획 계획 과정 졸리운_곰 2025.12.06 142
1227 [一日30分 인생승리의 학습법] 크몽에서 업무의뢰 제안받으면 어떻게 견적내야 할까? 졸리운_곰 2025.11.21 161
1226 [一日30分 인생승리의 학습법] Vrew 워터마크 제거 브루 로고 없애기 무료로 쓰는 법 file 졸리운_곰 2025.11.06 138
1225 [一日30分 인생승리의 학습법] 명령형 vs 선언형 프로그래밍 졸리운_곰 2025.10.16 196
1224 [一日30分 인생승리의 학습법] ▲ 2025년 가장 인기 있는 프로그래밍 언어 (spectrum.ieee.org) 졸리운_곰 2025.10.09 189
1223 [一日30分 인생승리의 학습법] [Jenkins] 젠킨스(Jenkins) 설치 하기 / 젠킨스 설치 방법 / 젠킨스 설정 하기 졸리운_곰 2025.09.10 167
1222 [一日30分 인생승리의 학습법] 유능한 리더들은 어떤 능력으로 불확실성을 헤쳐나가는가 file 졸리운_곰 2025.08.26 164
1221 [一日30分 인생승리의 학습법] Ubuntu 24.04에 Mosquitto MQTT 서버를 설치하는 방법 졸리운_곰 2025.08.25 189
1220 [一日30分 인생승리의 학습법] Qiskit 시작하기 (Getting Started with Qiskit) file 졸리운_곰 2025.06.03 181
1219 [一日30分 인생승리의 학습법] 양자컴퓨팅 프로그래밍 file 졸리운_곰 2025.06.03 166
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED