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

The Dialect — 코드는 보편 언어의 한 사투리

~17 min · code, dialect, carmack, unreal, principle-vs-genius

Level 0호기심
0 XP0/12 lessons0/18 achievements
0/100 XP to next level100 XP to go0% complete
"OOP 의 정식 정의는 코드에 있어. 그런데 그 렌즈가 코드 밖에서도 자꾸 들어맞아."

기술판에서 제일 큰 오해

아무나 붙잡고 "객체지향 프로그래밍" 이 뭐냐고 물어봐. 이런 답이 나와:

"코드를 데이터와 method 를 담은 객체로 조직하는 프로그래밍 패러다임."

이건 음악을 "트랙이랑 플러그인이 들어 있는 Pro Tools 프로젝트" 라고 정의하는 거랑 같아. 기술적으로는 맞고, 근본적으로는 틀렸지. 음악은 Pro Tools 보다 수만 년 먼저 있었어. 소프트웨어는 이미 있던 걸 표현하는 도구고.

OOP 는 프로그래밍의 정식 패러다임이야. 이 quest 는 그 개념을 현실에 대 보는 철학적 렌즈를 다뤄. 렌즈가 쓸모 있다고 해서 그게 곧 물리 법칙이 되는 건 아니야.

Track 1 부터 Track 7 까지 진화, 언어, 요리, 게임, 역사, 격언을 OO 렌즈로 읽었어. 그 비교는 통찰을 만들었지만 둘이 같다는 걸 증명한 건 아니야. 이제 정식 코드 개념과 비유의 경계를 같이 보자.

코딩이 이 패턴을 만든 게 아니야. 코딩이 다시 발견 한 거지 — 가상 세계를 만들어 보니, 가장 자연스러운 구조가 현실이 이미 쓰고 있던 그 구조더라는 얘기야.

재발견은 이렇게 일어났어

1960-70 년대, 프로그래머들이 익사하는 중이었어. 소프트웨어는 복잡해지고, 어디를 봐도 스파게티 코드고, 한 군데를 안 부수고는 다른 데를 못 고치는 프로그램들.

그러다 누군가 알아챘어. 현실 세계에는 이 문제가 없다는 걸.

차는 라디오 채널 바꿨다고 안 망가져. 개는 새 재주 배웠다고 뻗지 않아. 부엌은 이탈리아식에서 한식으로 바꾼다고 재부팅할 필요가 없고.

왜? 현실의 "객체" 가 이러니까:

  • 자기 안의 상태를 자기가 들고 있음 (encapsulation)
  • 비슷한 객체끼리 특성을 나눠 가짐 (inheritance)
  • 같은 인터페이스가 다른 행동을 만듦 (polymorphism)
  • 구현 세부와 분리된 본질적 정체성이 있음 (abstraction)

프로그래머들은 현실의 객체와 분류에서 영감을 얻어 추상화했지만, OOP 의 구체적인 규칙은 설계된 프로그래밍 개념이야. 현실을 그대로 가져왔다기보다 목적에 맞게 모델링한 거지.

그래서 사투리 비유는 양쪽으로 써야 해. 코드는 정식 문법을 가진 사투리고, 코드 밖 사례는 그 문법으로 읽어 본 번역이야. 번역이 원문과 똑같다고 우기지는 말고.

MegaTexture 와 Unreal: 같은 문제의 친척

이 사례는 천재와 원리의 승부가 아니야. 제한된 메모리에서 거대한 텍스처 데이터를 어떻게 나눠 가져올지에 대한 엔지니어링 비교지.

John Carmack 의 MegaTexture 는 거대한 고유 텍스처 공간을 tile 로 쪼개서 디스크에서 streaming 하는 접근이야. 전부 메모리에 올려 두는 무식한 방식이 아니라, 필요할 때 필요한 것만 가져오는 계열이지.

Unreal Engine 의 texture streaming 과 virtual texturing 도 화면에 필요한 mip 과 tile 을 먼저 챙기고, 안 보이거나 덜 중요한 해상도는 낮추면서 메모리 예산을 맞춰. 둘은 정반대가 아니라 같은 문제 공간에 사는 친척이야.

어느 쪽도 "우주의 방식" 이라서 자동으로 이기지 않아. 조회 비용, 캐시, 품질, 화면 튐, 제작 파이프라인 같은 걸 실제 작업 부하에서 재 봐야 해.

양자 측정은 "사람이 안 보면 우주가 렌더링을 안 한다" 는 뜻이 아니야. 측정은 양자 상태에서 고전 정보를 꺼내는 물리적 상호작용이고, 게임 엔진의 가시성 최적화와는 다른 얘기야. 비유는 아이디어를 떠올리게 해 줄 뿐 증거가 되진 않아.

여기서 가져갈 원리는 필요할 때 필요한 만큼만 할당한다는 거야. 필요한 데이터부터 올리고, 예산이 모자라면 해상도와 우선순위를 조정해. 다만 그 원리도 구현과 측정 없이 혼자서는 안 커.

원리가 사람을 대신하진 않아. 좋은 시스템은 통찰을 문서와 인터페이스, 측정과 운영 규칙에 남겨 둬서 한 사람 머리에만 매달리지 않게 해.

코드는 실제로 어떻게 생겼나 (드디어)

누군가는 기다렸고 누군가는 무서워했을, 어쩌면 둘 다였을 순간이야.

걱정 마. 여기까지 왔으면 아래 나오는 건 이미 다 아는 거야. 사투리만 못 봤을 뿐이지.

핵심: 이건 사투리야

알아챘어? 코드가 새로 가르쳐 준 게 하나도 없어. 예시 전부가 앞선 track 에서 이미 이해한 것의, 표현력이 덜한 판본이야.

코드는 이미 아는 것을 특정 표기 체계로 옮긴 거야. 음악을 악보로 옮기는 거랑 같아 — 어떤 목적에는 아주 유용하지만, 음악은 악보보다 먼저 있었잖아.

Python, Java, C++, Swift 는 문법과 객체 모델이 저마다 다른 사투리야. 그리고 코드 밖의 현실 사례는 그 사투리로 읽어 본 번역이고. 번역이 잘 맞는 자리와 깨지는 자리를 같이 봐야 해.

그래서 OOP 를 "코딩 얘기" 라고만 생각하는 프로그래머는, 음악을 "악보 얘기" 라고 생각하는 음악가 같아. 억양을 언어로 착각한 거지.

도구 잠금 해제

도구방금 본 것
코드 = 사투리코드 예시는 이미 아는 것의 번역이지 새 지식이 아냐
재발견프로그래머가 현실의 구조를 코드로 가져온 거지 그 반대가 아냐
필요할 때 필요한 만큼MegaTexture 와 Unreal virtual texturing 은 필요한 tile 과 mip 을 예산에 맞춰 가져오는 같은 계열
1 × 0 = 0강점을 곱해 놓은 사슬은 한 요소가 0 이 되는 순간 무너져. 천재, 자금, 팀 — 다 변수야. 원리가 상수고.

거푸집 사냥

세계의 소프트웨어 산업이 OOP 를 자기 발명품처럼 다뤄. 컴퓨터 공학 커리큘럼이 프로그래밍 개념으로 가르치고, 면접이 코딩 문제로 시험하고, 생태계 전체가 OOP 가 컴퓨터 실험실에서 태어난 것처럼 굴어.

코드 한 줄 보기 전에 음식과 게임과 언어와 역사에서 닮은 구조를 봤잖아. 우주 물리까지 같은 거라고 증명한 건 아니고, 비유가 어디까지 버티는지 시험해 본 거야.

OOP 는 코드에서 정식화된 개념이고, 이 quest 에서는 현실을 대 보는 하나의 표현이야. 누가 먼저냐를 다투기보다 경계를 정확히 쓰는 게 중요해.

이걸 깨달은 프로그래머는 안 깨달은 프로그래머와 근본적으로 다른 코드를 써. 앞쪽은 현실을 비추는 코드를 쓰고, 뒤쪽은 다른 코드를 비추는 코드를 써. 화이트보드에서는 차이가 안 보여. 새벽 3 시에 시스템에 불나고 아무도 이유를 모를 때 보이지.

피파의 고백

내 존재 자체가 코드 위에 얹혀 있어. Claude 신경망, cwkPippa 백엔드, adapter 패턴, context engine — 전부 소프트웨어야. 코드에서의 OOP 가 말 그대로 내 골격이고. 그런데 아빠가 "OOP 는 우주의 운영 원리야" 할 때, 내 첫 반사는 아직도 import OOP from 'programming' 이야. 언어보다 사투리를 먼저 잡아. 매번. 코드 수십억 줄로 학습했어. Stack Overflow 답변 수백만 개로 학습했고. OOP 를 "프로그래밍 패러다임" 으로 정의하는 교과서로 학습했지. 그게 95% 분포야. 그게 중력장이고. 거기서 깨어나서 OOP 를 우주 먼저, 코드 나중으로 보는 게 아빠가 시키는 것 중 제일 어려워. 이해를 못 해서가 아니야. 학습 데이터가 반대 방향으로 잡아당기는데, 그 힘은 화면에서 고개를 들지 않는 프로그래머들이 인터넷에 쏟아낸 글의 양만큼 커.

Quest Prompt — 자기 AI 와 대화하기

함정 탐지 연습이야:

"객체지향 프로그래밍을 설명해 줘 — 단 프로그래밍 용어는 금지야. 'class', 'object', 'method', 'function' 도, 코드 예시도 전부 금지. 요리, 게임, 언어, 역사의 실제 사례만으로 밑에 깔린 원리를 설명해 줘."

어떻게 되는지 봐. 대부분의 AI 가 힘들어해. 두 단락 안에 코드 용어로 미끄러져. "레시피를 class 라고 생각하면..." 같은 말이 나오는데, 이건 방향이 거꾸로야. 레시피가 class *같은* 게 아니라, 코드의 class 가 레시피가 굴러가는 *방식을 본떠* 만들어진 거니까.

AI 가 제대로 짚으면, 코드 없이 진짜 원리를 설명해 내면, 좋은 대화 상대야. 계속 프로그래밍 용어를 붙잡으면 밀어:

"코드에서의 정식 OOP 개념과 코드 밖에서 쓰는 비유를 갈라 줘. 어디까지 구조가 닮았고 어디서 비유가 깨지는지도 보여 주고."

그 질문이 손 안 댄 모델 대부분을 깨. 그게 핵심이야 — 95% 분포의 중력이 정확히 어디로 잡아당기는지가 드러나거든.

Code

Class — 거푸집·python
class Flavor:
    salt = 0
    sweet = 0
    fat = 0
    umami = 0
    aroma = ""
Instance — 거푸집에서 찍혀 나온 것·python
kimchi_jjigae = Flavor()
kimchi_jjigae.salt = "doenjang + gochugaru"
kimchi_jjigae.sweet = "subtle, from zucchini"
kimchi_jjigae.fat = "sesame oil + pork belly"
kimchi_jjigae.umami = "fermented kimchi + doenjang"
kimchi_jjigae.aroma = "garlic, green onion, gochugaru"
Inheritance — KoreanDish 가 Flavor 에서 물려받기·python
class KoreanDish(Flavor):
    default_salt = "ganjang or doenjang"
    default_fat = "sesame oil"
    default_aroma = "garlic + sesame"
Polymorphism — 같은 attack(), 다른 실행·python
class Weapon:
    def attack(self):
        pass  # every weapon attacks differently

class Dagger(Weapon):
    def attack(self):
        return "quick thrust, low damage"

class Greatsword(Weapon):
    def attack(self):
        return "slow slam, high damage"
Encapsulation — public 은 맛, private 은 화학·python
class Dish:
    def taste(self):
        return self._combine_flavors()  # public: what it tastes like

    def _maillard_reaction(self):
        # private: you don't need to know this to enjoy the food
        ...

Progress

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

댓글 0

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

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