카테고리 없음

객체지향이 현실세계를 객체로 모델링한다?

일기를 쓰는 사람 2025. 4. 18. 22:31

네, 객체지향에서 자주 등장하는 **"현실 세계를 객체로 모델링한다"**는 개념은 표면적으로는 매력적이지만, 실제로는 매우 위험한 착각이 될 수 있습니다. 그 이유는 다음과 같습니다.


---

1. 현실은 중첩된 개념과 다중관계로 구성되어 있음

현실의 개체들은 **단일한 소속 구조(상속)**로 표현되지 않음
→ 예: "박쥐"는 포유류이자 날짐승이고, 때로는 애완동물일 수도 있음
→ 객체지향의 단일 상속 구조나 계층 구조는 이런 복잡성을 잘 표현하지 못함



---

2. 현실 세계의 '개체'는 항상 행동을 갖고 있지 않음

예: "바위", "기온", "방향" 같은 추상 개념들은 동작(method) 없이 단지 값이나 관계로 의미를 가짐
→ 그런데 객체지향에서는 무조건 메서드가 필요하므로, 실제 세계의 개념과 괴리 생김



---

3. 현실 세계는 '객체 간 메시지 교환' 같은 방식으로 동작하지 않음

Alan Kay가 처음 말한 "객체는 메시지를 주고받는 존재다"는 철학은 현실 세계와의 비유가 아니라 분산 시스템을 추상화한 모델이었음
→ 그러나 OOP는 그걸 현실 모델링으로 오해해서 ‘자동차 클래스’, ‘엔진 클래스’ 같은 식으로 과하게 투영함



---

4. 현실은 모호하고 상황 의존적이나, 객체 모델은 고정적

예: "학생"이라는 개체는 어떤 컨텍스트에선 사용자(User)고, 어떤 컨텍스트에선 직원(Employee)일 수도 있음
→ OOP는 컨텍스트 독립적인 고정 클래스 구조를 강요함 → 유연하지 않음



---

5. 실세계 객체는 종종 내부 상태를 직접 제어받지 않음

현실에선 "자동문"은 사람이 설계한 외부 규칙에 따라 움직이며, 스스로의 상태를 업데이트하지 않음
→ 객체가 자신의 상태를 스스로 갱신한다는 철학은 실제 시스템 설계와 다름



---

요약

> “현실을 그대로 코드로 옮긴다는 생각은 함정이다.”
객체지향은 현실을 모방하는 수단이 아니라,
프로그래머가 만든 추상적인 구조 모델에 불과하다.
현실을 닮았다고 믿는 순간, 오히려 부정확한 코드와 강제된 설계가 탄생한다.


교훈 : 배경지식이 없을 때 봐도 완전히 직관적인 인터페이스는 만드는 것이 불가능에 가깝다
다만 익숙해졌을 때 보면 직관적인 인터페이스는 충분히 만들 수 있다
이를 만들기 위해선 우선 코드를 더럽게 짜고, 편한대로 리팩토링하는 게 좋다.
처음부터 사람이 읽을 것을 고려하여 코드를 짜지 말고, 우선 막무가내로 짜보자.
그리고 코드의 길이가 길어지면 리팩토링하자