#5 Bend, or Break
5장 구부러지거나 부러지거나
💻 실용주의 프로그래머: Topic 28
결합도 줄이기 (Reduce Coupling)
1. 핵심 개념 — “서로 덜 연결될수록 더 바꾸기 쉽다”
2. 개념 비유 — “단단한 연결 vs 유연한 연결”
3. Tip 44 — “결합도가 낮은 코드는 바꾸기 쉽다”
4. 사례 — “열차 사고(Train Wreck)”
5. Tip 45 — “묻지 말고 말하라 (Tell, Don’t Ask)”
6. 데메테르 법칙 (Law of Demeter, LoD)
7. Tip 46 — “메서드 호출을 얽지 말라”
8. 글로벌 상태의 해악
9. Tip 47 — “전역 데이터를 피하라”
10. 외부 리소스도 전역 데이터다
11. Tip 48 — “전역적이어야 할 만큼 중요하다면 API로 감싸라”
12. 상속은 결합도를 높인다
13. 결합도의 최종 결론 — “결합은 시스템의 부패를 부른다”
💻 실용주의 프로그래머: Topic 29
실세계를 갖고 저글링하기 (Program Close to the Real World)
1. 핵심 개념 — “세상은 동적이다. 코드도 그래야 한다”
2. 이벤트(Event)의 개념
3. 이벤트 기반 설계의 필요성
4. 이벤트 처리 전략 — 4가지 핵심 기법
5. 유한 상태 기계 (FSM)
6. 감시자 패턴 (Observer Pattern)
7. 게시-구독 (Publish–Subscribe)
8. 반응형 프로그래밍과 스트림 (Reactive Programming & Streams)
9. 비동기 스트림과 REST 결합
10. 어디에나 이벤트가 있다
11. 관련 항목
🧩 변환 프로그래밍 — “프로그램은 결국 변환이다”
✔️ 프로그래밍은 곧 변환 과정이다
🔍 1970년대로 돌아가 파이프라인을 보자
단계별로 쪼개보면?
1) find . -type f
find . -type f2) xargs wc -l
xargs wc -l3) sort -n
sort -n4) tail -5
tail -5📦 데이터 공장처럼 생각하기
🧠 변환 모델로 생각하기
🧩 예제: 애너그램 탐색기 만들기
변환 단계 요약
단계
변환 내용
예시
🧪 실제 코드 예시(엘릭서)
예: 가능한 조합 생성
🛠 오류 처리는 어떻게?
🧭 왜 이것이 중요한가?
📝 실용 정리
✔️ 변환 중심으로 사고하라
✔️ 복잡도는 구조가 아니라 흐름에서 줄인다
✔️ 파이프라인은 언어에 상관 없다
🧱 Topic 31 — 상속세: 상속은 왜 이렇게 위험한가
🕰️ 상속의 역사: Simula67이 의도한 것
⚠️ 상속이 위험한 이유 1: 결합 폭발
❗ 잘못된 상속 예 (코틀린)
⚠️ 상속이 위험한 이유 2: 타입 분류를 위해 상속을 쓰는 것은 부적절
🧩 상속의 대안 1 — 인터페이스 / 프로토콜
✔️ 다형성 목적이라면 인터페이스가 정답
장점
🧩 상속의 대안 2 — 위임(Delegation)
✔️ Repository 기능을 상속하지 않고 위임으로 해결
장점
🧩 상속의 대안 3 — 믹스인 / 트레이트 / extension
공통 finder 기능 믹스인 예시 (코틀린 스타일)
🧪 계층이 복잡해지면 위험은 기하급수적으로 증가한다
🧩 도메인 검증의 현실: 상속보다 mixin/조합이 더 적합하다
🎯 결론 — 상속이 답인 경우는 거의 없다
✔ 상속을 피하고 인터페이스·위임·믹스인을 먼저 고려하라
✔ 상속은 결합도를 급격히 증가시킨다
✔ 타입 정리는 상속 계층보다 조합(composition)이 맞다
✔ 공통 기능은 mixin/trait/interface default method로 해결하라
✔ 프레임워크가 강제하지 않는 이상 상속을 쓰지 마라
🧩 Topic 32 — 설정(Configuration): 코드 밖으로 빼라
🧭 Tip 55 — 외부 설정으로 애플리케이션을 조정할 수 있게 하라
🏗️ 정적(static) 설정: 파일이나 DB로 관리
✔️ 실전 예 — application.yml
✔️ 실전 예 — Kotlin 구성 객체로 바인딩
🚚 서비스형 설정(Configuration-as-a-Service)
장점
실전 예 — 코틀린에서 설정 서버로부터 값 받기
🦤 도도 코드를 작성하지 말라 (Dodo Code)
🧾 실제 코틀린 서비스에서 자주 등장하는 설정 Anti-Pattern
❌ 1. 하드코딩된 URL, 포트, 토큰
❌ 2. 환경 별 if/else 분기
❌ 3. 운영 중 정책 변경을 배포로 해결
🛡️ 제대로 된 설정 구조를 설계하는 법
✔️ 1. 소스코드와 설정을 철저히 분리
✔️ 2. 모든 실행 환경에서 safe fallback 제공
✔️ 3. 설정 변경은 코드 배포 없이 반영
✔️ 4. 설정도 테스트해야 한다
🧪 실전 예: 정책을 외부 설정으로 빼기 (코틀린)
기존 나쁜 코드
개선된 코드
📌 결론: 설정을 코드 밖에 두어라
✔ 설정을 외부로 빼면…
✔ 상시 변화하는 현대 서비스에는 필수다
Last updated