C.W.K.
Stream
Lesson 03 of 05 · published

profile은 추상, binding은 구체

~11 min · polymorphism, oop, abstraction

Level 0침묵
0 XP0/36 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"'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는 오늘 그 역을 연기하는 구체 배우야. 배우를 바꾸고, 역할은 유지해. 이 엔진은 귀로 들을 수 있는 다형성이야.

Code

voice ID 말고 'pippa로 말해'에 의존해·python
# Polymorphism: the caller speaks to the ABSTRACT, never the concrete.
class VoiceBinding(Protocol):
    def synthesize(self, text: str, settings: Settings) -> Audio: ...

# 'Speak as pippa' is the abstract contract. Each account provides ONE
# concrete binding that satisfies it. The caller names neither provider
# nor voice ID:
def speak_as(profile: str, text: str) -> Audio:
    binding = resolve(profile, active_account())   # returns SOME VoiceBinding
    return binding.synthesize(text, defaults_for(profile))

# Swap primary -> secondary, or one provider for another: the call site is
# untouched. Depending on the abstract is the whole payoff.

External links

Exercise

코드 밖에서 추상 대 구체 나눔을 찾아 — 직책 대 이번 분기 그 자리를 채운 사람, 레시피 대 각 재료의 특정 브랜드, 인덱스 펀드 대 오늘 그 안의 정확한 보유 종목. 추상에만 의존하는 '호출자'를 이름 붙이고, 그게 오늘의 구체에 의존하기 시작하면 뭐가 깨질지 묘사해.
Hint
추상은 치환을 가로질러 참으로 남는 것이야. 구체는 오늘의 답이고. 오늘의 답을 하드코딩한 건 답이 바뀌는 날 틀려 — 그리고 답은 늘 결국 바뀌어.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.