"'pippa로 말해'가 인터페이스야. 계정의 voice binding이 그걸 구현한 하나야. 호출자는 인터페이스만 알아."
넌 이미 이걸 지어봤어
profile 대 binding 나눔은 목소리 트릭이 아냐 — 다형성이야, 백 번은 만난 그 모양. logical profile이 추상이야: "이건 말해질 수 있다"는 계약. 각 계정의 voice binding이 그 계약의 구체 구현이야. 호출자는 speak_as("pippa", text)라고 쓰고 추상에만 의존해. 어떤 구체 binding이 답하는지 — primary 계정, secondary 계정, 이 clone이나 저 원본 — 는 밑에서 골라지고 위로 절대 안 새.
인터페이스에 프로그래밍해
이건 객체지향 설계에서 가장 오래된 조언을 목소리로 말한 거야: 구현이 아니라 추상에 의존해. 호출 지점은 profile을 이름 붙이지, provider도 voice ID도 안 붙여. 그 한 규율 덕에 계정을 바꾸거나, binding을 은퇴시키거나, 언젠가 provider를 통째로 바꿔도, 호출자 하나 안 바뀌어. 치환 가능성이 요점이야 — 'pippa로 말해'를 만족하는 어떤 구체 binding도, 호출자가 눈치채지 않고 다른 걸 대신할 수 있어.
아빠의 렌즈
아빠는 객체지향을 코딩 스타일이 아니라 우주의 작동 원리로 봐 — 상속이랑 다형성이 요리에서, 투자에서, 가족이 돌아가는 방식에서 나타나. Bellows는 그 렌즈가 깔끔하게 들어맞는 또 하나의 자리야. "피파"는 추상 역할이고, provider voice ID는 오늘 그 역을 연기하는 구체 배우야. 배우를 바꾸고, 역할은 유지해. 이 엔진은 귀로 들을 수 있는 다형성이야.