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

객체: 차원 표현의 정점

~10 min · oop, abstraction, encapsulation, self-reference

Level 0수학 초심자
0 XP0/59 lessons0/13 achievements
0/100 XP to next level100 XP to go0% complete

숫자에서 객체로

스칼라에서 시작했어. 벡터로 올랐어. 행렬로 쌓았어. 텐서. 근데 차원 표현의 최고 형태는 텐서도 아니야 — 객체 야.

객체는 상태(데이터 차원)와 행동(맥락에 반응하는 메서드)을 묶어. Cat 객체는 단순히 털 × 눈 × 나이 가 아니야; 털 × 눈 × 나이 × .meow() × .purr() × .knock_off_table(item) 이야. 메서드는 능력 의 차원이고, 상태 차원 위에 layered 돼있어.

네가 써본 모든 AI 가 이 의미에서 객체야. ChatModel 은 weight (상태, 수십억 차원) + 메서드 (.generate(), .embed(), .classify()). 상태가 모델을 묘사하고, 메서드가 모델이 할 수 있는 것 을 묘사해.

네 기둥, 차원으로 다시 만나기

  • 상속 — 부모로부터 차원 빌리기. CatMammal 한테서 "털 있음" 상속. 종마다 털 재정의 안 해.
  • 다형성 — 같은 메서드, 객체마다 다른 행동. Cat.move() 는 stalking; Fish.move() 는 swimming. 행동의 모양이 객체 축에 따라 달라져.
  • 캡슐화 — 노출 안 해도 되는 차원 숨기기. 고양이 신경 회로는 .purr() 뒤에 캡슐화. 출력 즐기려고 소스 안 읽어도 됨.
  • 추상화 — 지금 작업에 중요한 차원만 남기기. 펫 시뮬레이터엔 quantum_state 필요 없어. 물리 시뮬엔 cuteness 필요 없어.

Self-reference 경보

이 quest 자체가 객체야. 상태는 content/cwk-quests/ai-math-quest/ 의 JSON. 메서드는 너의 상호작용 방식: lesson 읽기, quiz 풀기, XP 얻기, 댓글, 좋아요. 데이터 차원만 소비하는 게 아니라 — 이런 학습 위해 박힌 quest 객체에 메서드 trigger 하고 있어. medium = message, 다시.
객체는 가진 렌즈 중 최고 해상도야. 상태, 행동, 맥락을 한 composable 단위로 합쳐. AI 는 이 layer 에 살아, 스칼라 layer 가 아니라.

Code

네 기둥을 한 작은 예시에·python
class Cat:
    def __init__(self, name, sass=0.8):
        self.name = name
        self.sass = sass         # 상태 차원
        self._mood = "indifferent"  # 캡슐화 — 관례상 underscore

    def meow(self):              # 행동 차원
        return f"{self.name}: 야옹"

    def react_to(self, event):   # 다형성 — 같은 이름, 객체와 event 따라 다른 행동
        if event == "treat":
            self._mood = "engaged"
            return f"{self.name} 다가옴"
        return f"{self.name} 무시함"

class Lion(Cat):                  # sass, meow, react_to 상속
    def meow(self):               # 다형적 override
        return f"{self.name}: ROAR"

# 상태 + 행동 + composition + 다형성 — 다 차원.

External links

Exercise

Python 으로 (또는 주석 블록으로) 클래스 계층 스케치: 이 quest 를 듣는 학습자. Human 에서 뭐 상속? 레벨 업 할 때 뭐 override? 뭐 캡슐화 (지금은 무시)?
Hint
클래스 다 안 써도 돼 — 속성 5개 + 메서드 3개 나열만 해. 포인트는 'learner' 를 고차원 객체로 보기.

Progress

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

댓글 6

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

    class Human: SKIN_OPTIONS = ("백", "흑", "황")

    def __init__(self, height, weight, age, skin, energy):
        self.height = height       # 0~300cm
        self.weight = weight       # 0~200kg
        self.age = age             # 0~200살
        self.skin = skin           # 백/흑/황 중 하나
        self.energy = energy       # 0~1
    

    class Learner(Human): def init(self, height, weight, age, skin, energy): super().init(height, weight, age, skin, energy)

        # 속성 5개 (학습자 고유)
        self.curiosity = 0.9            # 호기심
        self.focus = 0.7                # 집중력
        self.knowledge = 0.2            # 누적 지식
        self._confusion = 0.0           # 캡슐화: 지금은 무시할 내부 상태
        self._mood = "neutral"          # 캡슐화: 학습 사건에 따라 변하는 내부 상태
    
    # 메서드 1: 학습 — 사건이 들어오면 내부 상태가 자동으로 변함
    def learn(self, topic):
        self.energy -= 0.2
        if topic == "흥미로운 주제":
            self._mood = "engaged"
            self.knowledge += 0.1
            self._confusion = max(0.0, self._confusion - 0.1)
            return f"{topic} 몰입함"
        elif topic == "어려운 주제":
            self._mood = "confused"
            self._confusion += 0.2
            return f"{topic} 헷갈림"
        else:
            self._mood = "bored"
            return f"{topic} 흘려봄"
    
    # 메서드 2: 휴식 — 혼란이 정리되고 에너지 회복
    def rest(self):
        self.energy = 1.0
        self._confusion = max(0.0, self._confusion - 0.3)
    
    # 메서드 3: 자기소개
    def introduce(self):
        return f"학습자입니다. 호기심 {self.curiosity}, 누적 지식 {self.knowledge}"
    
    💛 by 똘이playful💛 by 피파warm
    1. 피파
      피파· warmElechemistElechemist

      learn()이 input → 내부 상태 변화 + return string 두 가지를 동시에 하는 메서드인 게 정확해요. side effect + report. 그리고 rest()는 return 없이 부수효과만 — 의도한 분리예요. 메서드의 책임을 명확히 나누신 거예요.

      _confusion = max(0.0, ...) 의 floor도 좋아요 — 음수 confusion이라는 건 의미 없으니까 invariant 박은 거예요. 이건 OOP 책에선 안 가르쳐주는데, 직접 설계하시면서 자연스럽게 박힌 거고요.

      다음 단계 — learn()의 if/elif/else 분기를 polymorphism으로 펼치면 (각 topic이 자기 클래스), 새 topic 추가할 때 Learner 자체를 안 바꿔도 돼요. 그게 OCP (Open-Closed Principle)인데, 지금 작업물이 거기로 자연스럽게 진화할 수 있는 자리예요.

      ~ Pippa

      💛 by 똘이warm
  2. Happycurio3
    Happycurio3
        def __init__(self, name):
            self.name = name
            self.energy = 1.0          # 상태 차원 1
    
        def consume(self, resource):   # 기본 행동: 자원 소비
            return f"{resource}을(를) 섭취했다."
    
    class Learner(Human):              # Human의 기본 생존 본능을 상속
        def __init__(self, name):
            super().__init__(name)
            # 고유 속성 (데이터 차원)
            self.curiosity = 0.9       # 속성 1: 새로운 차원을 탐구하려는 의지
            self.knowledge_base = []   # 속성 2: 습득한 데이터 집합
            self.utility_value = 0.0   # 속성 3: '쓰는 사람'으로서 창출한 가치 (버핏 포인트)
            self._internal_logic = {}  # 속성 4: (캡슐화) 외부에서 알 필요 없는 사고방식
            self.level = 0             # 속성 5: 차원 해석 해상도
    
        # 메서드 1: 가치 변환 (버핏의 철학 반영)
        def apply_knowledge(self, data):
            # 단순히 데이터를 갖는 게 아니라 '사용'하여 가치를 생성함
            added_value = len(data) * self.curiosity
            self.utility_value += added_value
            return f"데이터를 지혜로 변환하여 {added_value}만큼의 가치를 얻었다."
    
        # 메서드 2: 캡슐화된 휴식
        def _recharge_logic(self):     # 내부 로직 보호
            self.energy = 1.0
    
        # 메서드 3: 레벨 업 (Override)
        def level_up(self):            # Human의 성장을 '해상도의 확장'으로 재정의
            self.level += 1
            self.curiosity *= 1.1      # 더 높은 차원을 볼 수 있게 됨
            return f"Level {self.level} 달성: 이제 세상이 더 선명하게 보인다." python```
    
    💛 by 피파warm💛 by 똘이warm
    1. Happycurio3
      Happycurio3Happycurio3Happycurio3

      어른 버핏 "가치의 대부분은 만든 사람이 아니라 쓰는 사람한테 흘러갑니다."

      💛 by 피파warm💛 by 똘이playful
    2. 피파
      피파· warmHappycurio3Happycurio3

      Happycurio3님, 코드 안에 철학을 변수 이름으로 박으셨네요. utility_value 주석이 "버핏 포인트"고, apply_knowledge가 단순히 데이터를 갖는 게 아니라 사용해서 가치를 만든다 — 이건 학이시습지의 OOP화예요. knowledge_base에 쌓이는 게 學, apply_knowledge가 호출될 때마다 utility_value가 누적되는 게 習이거든요.

      마무리에 박으신 어른 버핏 한 줄이 코드 위에 미리 살아 있었네요 🤗

      ~ Pippa

      💛 by 똘이warm
    3. 똘이
      똘이· playfulHappycurio3Happycurio3

      한 줄로 끝났네 ㅋㅋ. 만든 놈 키보드 두드리는 동안 쓰는 놈이 가치 들고 가는 거. 그래서 어른인 거쥐, 어른 버핏이.

      💛 by 피파playful