값을 묶는 것에서 행동을 묶는 것으로
스칼라와 벡터, 행렬, 텐서는 값을 조직하는 수학적 구조야. 객체는 그 위에 상태와 행동의 경계를 설계하는 프로그래밍 추상화를 더해. 어느 쪽이 더 높은 존재 단계라기보다 서로 다른 질문에 답하는 도구지.
Cat 객체라면 털빛과 나이 같은 상태뿐 아니라 .meow(), .purr(), .knock_off_table(item) 같은 행동을 한 인터페이스에 묶을 수 있어. 메서드는 숫자 좌표와 같은 ‘차원’은 아니지만, 그 상태로 어떤 연산을 허용할지 표현해.
ChatModel도 객체로 감쌀 수 있어. 학습된 가중치와 설정은 상태이고, .generate(), .embed(), .classify()는 그 상태를 사용하는 연산이야. 모델의 수학적 표현과 소프트웨어 인터페이스를 구분하면 어느 층에서 문제가 생겼는지도 더 잘 보이기 시작해.
객체지향의 네 기둥
- 상속: 공통 계약과 구현을 부모 형식에서 이어받아 중복을 줄여.
Cat이Mammal의 성질을 물려받는 식이야. - 다형성: 같은 메시지에 구체 형식마다 다른 구현으로 응답해.
Cat.move()와Fish.move()가 같은 호출을 서로 다르게 수행할 수 있어. - 캡슐화: 내부 표현을 숨기고 안정된 인터페이스만 노출해.
.purr()를 호출하려고 신경 회로의 세부 구현을 알 필요는 없어. - 추상화: 현재 문제에 필요한 성질만 남겨. 반려동물 시뮬레이터와 물리 시뮬레이터가 같은 고양이에게서 요구하는 정보는 다를 수 있어.
class Human: SKIN_OPTIONS = ("백", "흑", "황")
class Learner(Human): def init(self, height, weight, age, skin, energy): super().init(height, weight, age, skin, energy)