"'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는 오늘 그 역을 연기하는 구체 배우야. 배우는 바꾸고 역할은 그대로 둬. 이 엔진은 귀로 들리는 다형성이야.