ADP, SDP, SAP는 컴포넌트 안정성 원칙(Principles of Component Cohesion) 이다.
이건 “컴포넌트가 얼마나 안정적이고, 변경하기 쉽고, 의존 관계에서 어떻게 버틸 수 있는가”를 다루는 원칙이다.
(1) ADP – Acyclic Dependencies Principle (비순환 의존 원칙)
- 정의: 컴포넌트 의존성 그래프에는 **순환(cycle)**이 있으면 안 된다.
- 이유: 순환이 생기면 하나를 바꾸려 할 때 서로 꼬리에 꼬리를 물고 다 바꿔야 해서 변경/빌드/배포가 불가능해짐.
하루 종일 일해서 무언가 동작하게 만들어 놓고 퇴근했는데, 이튿날 출근해 보니 전혀 돌아가지 않는 경험을 해본 적 있는가?
이는 내가 작업한 코드가 의존하는 코드를 다른 개발자가 수정했기 때문이다. 저자는 이것을 **숙취 증후군(hangover syndrome)**이라고 부른다.
컴포넌트 간 cycle이 발생하면 이런 숙취 증후군이 발생할 수 있다.
순환을 끊는 방법은 두 가지가 있다.
- DIP(의존성 역전 원칙)를 이용한다. 인터페이스를 만들고 이를 상속하는 클래스를 다른 컴포넌트로 옮겨서 의존 방향을 바꾼다.
- 공통 컴포넌트를 만든다. 두 컴포넌트가 동시에 의존하는 새로운 컴포넌트를 만들고, 공통 의존 코드를 그쪽으로 이동시킨다.
ADP (순환 없애기) 예시
- 상황: 팀 A는 팀 B의 보고서 없이는 일을 못 하고, 팀 B는 팀 A의 자료 없이는 보고서를 못 쓰는 상황.
- 결과: 서로 기다리다 일이 마비됨.
- 해결: 팀 C를 만들어 공통 자료를 관리 → A, B는 C만 참조.
→ 순환을 끊어야 일이 진행된다.
(2) SDP – Stable Dependencies Principle (안정된 의존 원칙)
- 정의: 더 안정적인(변경이 적은) 컴포넌트에만 의존해야 한다.
- 이유: 자주 바뀌는(불안정한) 컴포넌트에 의존하면, 그 변경이 전파되어 불안정해짐.
안정성이란 무엇인가?
- 안정적인 컴포넌트: 안쪽으로 들어오는 의존성이 많다. 외부가 바뀌어도 내부는 잘 변하지 않는다.
- 불안정한 컴포넌트: 밖으로 나가는 의존성이 많다. 외부가 바뀌면 내부도 그만큼 바뀔 가능성이 크다.
하지만 안정적인 컴포넌트가 무조건 좋은 것은 아니다.
변경이 많은데도 지나치게 안정적이라면, 그것을 의존하는 다른 컴포넌트들 때문에 쉽게 수정하기 어렵다.
그래서 다음 원칙인 SAP가 필요하다.
SDP (안정적인 곳에만 의존) 예시
- 상황: 회사 인사 시스템(HR)은 매년 조금 바뀜, 회계 시스템은 법적으로 안정적.
- 급여계산 서비스가 HR 쪽을 직접 의존하면 HR 바뀔 때마다 급여 서비스도 깨짐.
- 대신 회계 시스템(안정적인 것)에만 의존하면 훨씬 안전.
→ 자주 안 바뀌는 걸 기준으로 삼아라.
(3) SAP – Stable Abstractions Principle (안정된 추상화 원칙)
- 정의: 컴포넌트는 안정된 정도만큼만 추상화 되어야한다.
- 이유: 안정적이고 동시에 구체적이면 바꿀 수 없게 돼서 경직성(rigidity) 문제가 생김.
시스템에는 **자주 변경해서는 안 되는 코드(고수준 정책)**와 **쉽고 빠르게 변경할 수 있는 코드(저수준 구현)**가 있다.
- 고수준 정책 코드는 안정성이 높은 컴포넌트에 위치해야 한다.
- 동시에 안정성이 높은 컴포넌트는 추상화 수준도 높아야 한다.
추상화 수준이란 무엇일까?
→ 컴포넌트 안에서 인터페이스·추상 클래스의 비율이 높은 정도를 뜻한다.
- 안정적인 컴포넌트 = 추상적(인터페이스 위주)
- 불안정한 컴포넌트 = 구체적(구현 위주)
SAP (안정성 = 추상성)
- 상황: "우리 회사 결재 프로세스는 절대 안 바뀐다"고 해서 아주 구체적인 문서 양식을 박아버림.
- 10년 뒤 전자결재로 바뀌면 양식 때문에 전체 시스템을 뜯어고쳐야 함.
- 차라리 **“결재는 승인/거절이라는 추상 인터페이스로 정의”**해 두면, 실제 종이든 전자든 바꿔끼우기만 하면 됨.
→ 안정적인 규칙일수록 인터페이스/추상화로 남겨야 한다.
정리
- ADP: 순환 없애라 → 그래프는 DAG
- SDP: 안정된 것에만 의존해라 → 불안정한 쪽에 의존하면 같이 불안정해짐
- SAP: 안정된 건 추상적이어야 한다 → 구체적이면서 안정적이면 시스템이 경직됨
ADP = 구조적 안전망, SDP = 방향성 규칙, SAP = 추상화 규칙
'개발 > 책' 카테고리의 다른 글
| 함수만 잘 짜도 중간은 간다 - 2 [Clean Code] (0) | 2025.09.28 |
|---|---|
| 함수만 잘 짜도 중간은 간다 - 1 [Clean Code] (0) | 2025.09.17 |
| 프로그래밍 패러다임 : 빼앗긴 덕분에 얻은 것들 [Clean architecture] (1) | 2025.09.02 |