콘텐츠로 이동

반복하지 않기

don't repeat yourself

모든 지식은 시스템 안에서 단일하고 모호하지 않은 권위 있는 표상을 하나만 가져야 한다는 원칙이다. 헌트와 토머스는 이것을 코드 규칙이 아니라 지식의 표상에 관한 규칙으로 세운다.

성숙도 상록

용어와 역어

경쟁 역어: DRY 원칙, 중복 배제

실무에서는 원어 약자 DRY가 그대로 쓰인다. 이 문서도 약자를 병기한다. representation은 '표현'이 아니라 '표상'으로 옮긴다 — 언어철학 계열과 같은 대상을 가리켜야 하기 때문이다. 원문의 authoritative는 '권위 있는'으로 직역한다. '공식'이나 '정본'으로 옮기면 중복 자체가 아니라 승인 절차의 문제로 읽힌다.

관련 개념

  • 관련 뜻과 지시체같은 것을 가리키는 표상이 둘일 때 무엇이 문제인가를 둘 다 묻는다. 프레게는 두 표상이 왜 서로 다른 값을 갖는지 설명하고, DRY는 그 둘을 하나로 줄이라고 처방한다.
  • 관련 REA 회계 모델REA는 사건을 한 번만 저장하고 차변·대변을 파생으로 본다. 이름이 붙기 열일곱 해 전의 회계판 DRY다.
  • 관련 계정계정과목을 정하는 일이 곧 어떤 지식이 어디에 한 번만 적힐지 정하는 일이다.
  • 관련 복식부기복식부기는 한 사건을 두 번 적는다. 그 중복이 검증 장치라서, 표기법의 중복이 늘 결함은 아님을 보여주는 반례다.
이 문서를 가리키는 글 2개
  • 관련 경로의존성같은 지식을 여러 곳에 복사해 두면 그 복사본들이 서로를 붙잡아 바꿀 수 없게 만든다. 중복이 고착을 만드는 경로다.
  • 관련 REA 회계 모델사건을 한 번만 저장하고 차변·대변을 파생으로 돌리는 것이 곧 원장에 적용한 DRY다. 이름이 붙기 열일곱 해 전이다.

원칙의 진술은 한 줄이다. 모든 지식은 시스템 안에서 단일하고 모호하지 않은 권위 있는 표상을 하나만 가져야 한다. 자주 인용되지만 자주 잘못 읽힌다. 문장의 주어는 코드가 아니라 지식이다.

그래서 무엇이 위반인지가 코드 모양으로 정해지지 않는다. 똑같이 생긴 두 함수가 서로 다른 두 규칙을 구현하고 있다면 위반이 아니다. 나중에 한쪽만 바뀌어야 하기 때문이다. 전혀 다르게 생긴 두 곳이 같은 규칙을 각자 알고 있다면 위반이다. 세율이 데이터베이스 제약과 검증 코드와 사용자 안내문에 각각 적혀 있으면, 세 곳이 함께 틀리는 날이 온다. 헌트와 토머스가 스키마와 빌드 스크립트와 문서까지 같은 잣대로 보는 이유가 이것이다.

같은 문제를 언어철학이 먼저 다뤘다. 프레게는 하나의 지시체에 두 표상이 붙을 때 그 둘이 왜 다른 인지적 가치를 갖는지 물었다. DRY는 같은 상황에서 반대 방향으로 간다. 설명하는 대신 하나로 줄이라고 한다. 질문이 같고 처방이 다르다.

회계 쪽에는 이 원칙이 이름보다 먼저 와 있었다. 매카시의 1982년 REA 논문은 부제부터 공유 데이터 환경이다. 차변과 대변은 저장할 사실이 아니라 사건에서 파생되는 값이라고 본다. 사건을 한 번만 적고 나머지를 계산하라는 것이 곧 원장에 적용한 DRY다. 헌트와 토머스보다 열일곱 해 앞선다.

그런데 복식부기 자체가 반례로 남는다. 한 사건을 차변과 대변에 두 번 적고, 그 둘이 맞아떨어지는지로 오류를 잡는다. 중복이 결함이 아니라 검사 장치다. DRY가 겨누는 것은 중복 자체가 아니라 따로 갱신될 수 있는 중복이라는 것이 여기서 드러난다. 한 번의 기표가 두 자리를 동시에 움직인다면 표상은 여전히 하나다.

참고문헌

  1. Andrew Hunt, David Thomas (1999). The Pragmatic Programmer: From Journeyman to Master. Addison-Wesley
  2. Andrew Hunt, David Thomas (2019). The Pragmatic Programmer: Your Journey to Mastery, 20th Anniversary Edition. Addison-Wesley
  3. William E. McCarthy (1982). The REA Accounting Model: A Generalized Framework for Accounting Systems in a Shared Data Environment. The Accounting Review 57(3), 554-578