홈으로 돌아가기

OOP: 개발자 사고의 자연스러운 기반 | 분석

이 글은 OOP에 대한 신화를 반박하며, OO 언어 등장 이전 Unix 시스템 호출과 C 라이브러리 예시를 통해 객체 패러다임이 인간 사고의 자연스러운 분류 방법에 뿌리를 두고 있음을 보여준다. 엄격한 계층의 한계와 패러다임 발전 전망을 분석한다.

OOP — 자연에 대한 헌사: 사고가 코드를 어떻게 형성하는가
Advertisement 728x90

객체 지향 프로그래밍: 사고의 자연스러운 기반인가, 인공적인 구성물인가?

객체 지향 프로그래밍은 종종 프로그래밍 언어의 발명품으로 여겨지지만, 그 뿌리는 훨씬 더 깊숙이, 인간 사고의 본성 자체에 있습니다. OOP에 대한 오해를 바로잡고, 객체 패러다임이 C++나 Java가 등장하기 훨씬 전에 존재했으며, 그 원리가 코드뿐만 아니라 일상적인 의사소통에도 내재되어 있음을 증명해 보겠습니다.

OOP가 객체 지향 언어보다 훨씬 먼저 나타났다

흔한 오해: 객체 지향성은 C++의 등장과 함께 나타났다. 실제로는 객체 지향 언어 시대 이전의 시스템에서도 그 요소가 존재했습니다. 유닉스 계열 운영 체제의 시스템 콜만 봐도 됩니다. write() 함수를 예로 들면, 단 한 줄의 C++ 코드 없이도 핵심 OOP 원리를 보여줍니다.

이 시스템 콜은 사용자에게 구현을 숨깁니다 (캡슐화), 다양한 객체 유형을 지원합니다 (파일, 소켓, 장치—다형성), 그리고 동작 상속을 허용합니다 (예: TCP와 UDP 소켓 쓰기는 공유 데이터 전송 메커니즘을 사용—상속). 추상화 계층은 다음과 같습니다:

Google AdInline article slot
  • 추상 파일

- 소켓

- UDP

- TCP

Google AdInline article slot

- 디스크 파일

- 장치

- 블록

Google AdInline article slot

- 문자

- 파이프

동일한 패턴이 C 라이브러리에서도 나타납니다. 예를 들어 TRex 라이브러리를 통한 정규 표현식:

TRex _trex_compile(const TRexChar pattern, TRexChar error);
void trex_free(TRex exp);
TRexBool trex_match(TRex exp, const TRexChar text);
TRexBool trex_search(TRex exp, const TRexChar text, const TRexChar** out_begin, const TRexChar** out_end);

여기서 TRex 클래스에 생성자, 소멸자, 메서드가 명확히 보입니다. 라이브러리의 단순성 때문에 다형성은 없지만, 구조는 객체 지향적입니다. OOP는 발명된 것이 아니라 프로그래밍 언어에 의해 형식화된 것이며, C 코드와 시스템 API에서는 이미 사실상 존재했습니다.

객체 패러다임의 인지적 기반

OOP의 주된 근거는 프로그래밍 밖에 있습니다: 인간 사고는 본질적으로 분류적입니다. 모든 명사, 동사, 형용사는 클래스나 속성을 정의합니다:

  • "빨강"—특정 색상을 가진 객체 (인터페이스 IColorful)
  • "수영"—IMovable 동작을 구현하는 차량
  • "가구"—"의자"나 "소파"로 구체화된 추상 클래스

영어는 관사를 통해 이 논리를 반영합니다: 부정관사 (a table)는 클래스를 소개하고, 정관사 (the table)는 특정 인스턴스를 가리킵니다. 이 구조는 OOP 원리와 직접 맞아떨어집니다. 객체 지향 프로그래밍은 유행에 대한 추종이 아니라 뇌가 정보를 처리하는 자연스러운 방식을 반영한 것입니다.

그러나 현실 세계는 어떤 분류보다 복잡합니다. 객체는 동시에 여러 클래스에 속할 수 있습니다 (테이블은 가구이자 목제품이며, 홍수 시 부양 장치). 엄격한 OOP 계층 구조는 이 다차원성을 종종 반영하지 못해 인위적인 제약을 초래합니다. 하지만 이는 패러다임의 결함이 아니라 모든 모델링의 결과입니다: 완벽한 세계 지도는 세계 그 자체입니다. 단순화는 불가피하며, OOP는 복잡성을 관리하는 도구 중 하나일 뿐입니다.

OOP가 사라지지 않는 이유

OOP가 함수형 프로그래밍에 밀려날 것이라는 오해는 핵심 사실을 무시합니다: 패러다임은 서로 대체하지 않고 보완합니다. 함수형 접근법은 데이터 처리에 탁월하지만, 엔티티 상호작용이 지배적인 영역 (GUI, 분산 시스템, 게임)에서는 객체 모델이 여전히 필수적입니다.

Dog/Cat 클래스 같은 예시로 OOP의 "인위성"을 비판하는 것은 부당합니다. 실제 사례는 시스템 API와 라이브러리에 있으며, 객체는 물리적 또는 추상 엔티티 (파일, 네트워크 연결, 트랜잭션)를 모델링합니다. 문제는 패러다임이 아니라 피상적 적용입니다. OOP와 인지 과정의 깊은 통합은 사람들이 소프트웨어를 만드는 한 그 관련성을 보장합니다.

주요 포인트

  • OOP는 특화된 언어가 등장하기 훨씬 전에 시스템 API와 C 라이브러리에 존재했다
  • 객체 구조는 인간이 사물을 분류하는 자연스러운 방식을 반영한다
  • OOP 계층의 경직성은 패러다임 결함이 아니라 모델링 단순화의 필연이다
  • 프로그래밍 패러다임은 서로 대체하지 않고 작업에 따라 보완한다
  • 패러다임 선택의 핵심 기준은 트렌드가 아니라 문제 도메인 적합성이다

결론: OOP는 일시적인 유행이 아니라 인간 인식 자체에 뿌리박힌 기본 도구입니다. 그 진화는 하이브리드 접근 (예: 객체-함수형 언어)을 통해 계속되지만, 핵심 원리는 지속적으로 관련성을 유지할 것입니다. 개발자는 구문뿐 아니라 패러다임의 철학을 이해해야 템플릿화된 해결책을 피하고 실제 시스템 엔티티에 맞는 아키텍처를 구축할 수 있습니다.

— Editorial Team

Advertisement 728x90

다음 읽기