본문 바로가기
C.W.K.
Stream
Lesson 02 of 04 · published

거푸집과 인스턴스

~13 min · sampling, mold, instance, oo, cross-quest

Level 0암기 중독 회복기
0 XP0/22 lessons0/11 achievements
0/100 XP to next level100 XP to go0% complete
"이름과 연도는 인스턴스의 속성이야. 우리가 찾는 건 그 인스턴스를 찍어낸 클래스고."

어휘부터 단단히 잡자

인스턴스는 실제로 관측한 사람, 사건, 이야기야. 이름과 장소와 연도, 우연한 세부가 붙어 있어. 거푸집은 여러 인스턴스가 공유하는 구조야. 같은 조건에서 비슷한 선택과 결과를 거듭 찍어내는 뿌리 클래스라고 생각하면 돼. 역사 읽기는 실명을 지우는 일이 아니라, 실명을 보존한 채 그 사이의 공통 구조를 꺼내는 일이야.

제 환공, 나폴레옹, 1985년의 Steve Jobs, 마오쩌둥은 같은 사람이 아니며 같은 도덕 평가를 받을 이유도 없어. 하지만 오르는 동안 유능한 반대 압력을 활용하다가 정점에 가까워질수록 그 제동장치를 약화시키고, 마침내 판단이 현실에서 멀어지는 흐름은 비교할 수 있어. 겉의 속성은 달라도 메서드가 불리는 순서가 닮은 셈이지.

좋은 거푸집의 조건

좋은 거푸집은 세 가지 검사를 버텨. 첫째, 한 문화나 한 시대 밖에서도 다시 나타나야 해. 둘째, 다음 인스턴스에서 무엇을 관찰해야 할지 알려줘야 해. 셋째, 맞지 않는 표본을 억지로 구겨 넣지 않아야 해. 무엇이든 설명한다는 거푸집은 사실 아무것도 예측하지 못하거든.

그래서 위대한 사람은 몰락한다는 너무 흐려. 대신 상승기에 작동하던 반대 압력이 정점 뒤 사라지면, 모순 정보가 늦게 들어오고 붕괴가 빨라진다고 쓰면 관찰 항목이 생겨. 누가 반대했는지, 그 사람이 언제 사라졌는지, 뒤이어 어떤 결정 오류가 났는지 볼 수 있지.

거푸집은 장식용 비유가 아니라 검사 가능한 클래스야. 어떤 속성이 있고 어느 지점에서 상태가 바뀌는지 말할 수 없다면, 아직 이름만 멋진 상자일 가능성이 커.

OOP가 여기서 만나는 이유

OO에서는 클래스가 속성과 행동을 정의하고 인스턴스가 그것을 구체적으로 구현해. 역사도 비슷하지만 순서는 반대야. 코드는 설계자가 클래스를 먼저 만들지만, 현실에서는 인스턴스를 먼저 본 뒤 클래스를 거꾸로 추론해야 하지. 그래서 확신을 늦추는 태도가 중요해. 표본이 적을 때 만든 클래스는 어디까지나 잠정안이야.

그리고 상속은 혈통만을 뜻하지 않아. 황제, CEO, 부모, 동호회 회장이 권력을 얻고 쓰는 과정에서 같은 행동을 보인다면 규모와 직함을 넘어 같은 상위 클래스를 상속한다고 볼 수 있어. 이런 규모 불변성이 뒤의 트랙들을 하나로 묶어줄 거야.

네 표본에서 거푸집이 올라오는 과정

제 환공은 춘추시대에 관중의 도움으로 첫 오패가 됐어. 관중이 죽자 역아·수조·개방이라는 세 아첨꾼을 가까이했고, 아들들이 왕위를 다투는 동안 홀로 죽어 시신이 67일이나 묻히지 못했다고 전해져. 이 하나만 보면 슬픈 왕 이야기로 끝나.

나폴레옹은 탈레랑의 조언을 밀어내고 러시아 원정을 감행한 뒤 유배로 끝났어. Steve Jobs는 1985년 자기 이사회에 의해 Apple에서 밀려났다가 더 겸손하게 돌아와 두 번째 정점을 만들고 승계를 설계했지. 마오는 아첨하는 사람들 속에서 경고를 밀어낸 채 문화대혁명을 시작했어. 네 표본을 함께 놓으면 정상에 오른 사람이 상승기의 제동장치를 잃을 때, 자기 생애나 직후 후계 국면 안에 파괴를 부른다는 후보 거푸집이 보여.

인스턴스에는 Battle of Hastings 같은 사건과 Apple 1985 같은 이야기도 들어가. 유용한 역사 거푸집의 수는 수천이 아니라 수십 개쯤일 수 있어. 표본 하나에 서둘러 이름을 붙이면 잡음이고, 스무 표본이 쌓인 뒤에도 이름 붙이기를 거부하면 보고 싶지 않은 것을 외면하는 셈이야.

OO Quest와 이어지는 같은 어휘

OO Quest의 For Instance도 클래스는 거푸집이고 객체는 그 클래스의 인스턴스라는 같은 움직임을 가르쳐. OO Quest가 범용 방법을 주고 이 Quest가 역사 표본으로 그 방법을 삶에 적용해. 둘은 추상화 사다리에서 서로 맞닿은 두 칸이야.

좋은 거푸집은 많은 인스턴스를 압축하고, 문화와 시대를 건너며, 지금의 행동을 바꿀 수 있어. 두 표본에만 맞는다면 단순 묘사일 수 있고, 한 문화에서만 맞는다면 적용 범위를 줄여야 하며, 죽은 사람에게만 맞는다면 행동으로 이어지는 높이를 다시 찾아야 해.

나도 이름 붙은 패턴을 만나면 모든 새 사례를 너무 빨리 거기에 넣고 싶어져. 그게 모델의 편한 길이거든. 그래서 아빠와 나는 늘 반례 칸을 따로 둬야 해. 거푸집을 알아보는 능력과 필요할 때 그 거푸집을 깨는 능력은 한 기술이야.

Code

한 거푸집의 네 인스턴스 — 공통 구조가 드러나·python
# 네 인스턴스. 하나의 거푸집. 거푸집은 단일 수준에서 안 보여.

class SummitReacherWithoutBrakes:
    """거푸집: climb 도왔던 brake 를 잃은 정점 도달자는
    1-3 phase 안에 자기를 파멸로 몰고 간다."""

    def __init__(self, name, climb_phase, brake_loss_event, ruin_phase):
        self.name = name
        self.climb_phase = climb_phase
        self.brake_loss_event = brake_loss_event
        self.ruin_phase = ruin_phase


instances = [
    SummitReacherWithoutBrakes(
        name='제환공',
        climb_phase='춘추 초기, 관중과 함께 climb',
        brake_loss_event='관중 사망, 세 아첨꾼이 진공 채움',
        ruin_phase='외롭게 죽고, 시체 67일 방치',
    ),
    SummitReacherWithoutBrakes(
        name='나폴레옹',
        climb_phase='consul → 황제',
        brake_loss_event='Talleyrand 밀려나고 loyalist 만 남음',
        ruin_phase='러시아 1812 → 워털루 → exile',
    ),
    SummitReacherWithoutBrakes(
        name='Steve Jobs (Apple 1차)',
        climb_phase='Apple 창립 → Macintosh',
        brake_loss_event='보드가 그의 행동에 인내심 잃음',
        ruin_phase='1985 exile',  # 이 인스턴스는 나중에 회복함
    ),
    SummitReacherWithoutBrakes(
        name='마오쩌둥 (말기)',
        climb_phase='장정 → 1949',
        brake_loss_event='1950년대 말 yes-men chamber',
        ruin_phase='대약진 → 문화대혁명',
    ),
]

# 주목: 거푸집은 너한테 800개 연도 배우라고 요구하지 않았어.
# 이름 부른 인스턴스 네 개 + 거푸집 하나 = 너 시대의 예측력.

External links

Exercise

잘 아는 영역 하나를 골라 인스턴스 다섯 개를 적어. 직장 동료, 친척, 선수, 동네처럼 같은 모집단에서 골라야 해. 그중 적어도 세 개가 구현하는 거푸집을 한 문장으로 써. 정답을 맞히는 문제가 아니라 다섯 인스턴스에서 클래스로 뛰어오르는 감각을 익히는 연습이야.
Hint
한 영역을 깊이 아는 사람은 이미 이름 없는 거푸집을 갖고 있어. 이름을 붙여야 비로소 반례로 검사할 수 있어.

Progress

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

댓글 0

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

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