IT Paradigm/OOP

앨런 케이는 왜 세포에서 영감을 받아 객체지향을 말했을까? (feat. OOP)

yeTi 2023. 11. 3. 08:46

안녕하세요. yeTi입니다.
요즘은 객체 지향 에 다가서는 시기인가 봅니다.
지난 포스팅 지향하다. (feat. Object-oriented Programming)안영회 대표님 의 피드백 후배 덕분에 한 번 더 생각하는 객체 지향 에 이어진 만남에서 객체 지향을 바라보는 시각이 좀 더 명확해진 거 같다는 느낌이 들었습니다.

안영회 대표님이 주관하시는 사랑방 세미나 3회차 - 생물과 에너지 를 들으며 신재웅 이사님께서 생물이 에너지를 응용하는 방식에서 설계적 패턴을 찾을 수 있을지도 모른다는 접근법을 듣는 순간 앨런 케이의 객체지향이 떠올랐습니다.

반응과 상호작용

에너지 순환 시스템이나 신경 전달 시스템에 대한 설명을 들으면서 드는 느낌은 각 세포나 기관은 자신이 가진 역할을 온전하게 수행하는데만 관심이 있지, 다른 세포나 기관의 반응에는 관심이 없다는 것입니다.

각 세포와 기관들은 필요한 요소를 받고 내제된 특성에 따라 반응하는 활동을 반복할 뿐인데 이러한 반응들이 서로간의 상호작용이 되어 하나의 개체로써 동작한다는 것이 세포를 비유한 객체지향의 은유라는 생각이 들었습니다.

세미나에서 언급한 예시 중 하나는 세포의 에너지 순환 과정입니다.

세포의 관점에서 맨브레인에 있는 기관이 각자가 가지고 있는 역할에 충실히 반응하면 APT 라는 에너지 운반 물질이 생깁니다.

증요한 것은 어느 기관조차 APT를 만들겠다는 목적을 가지지 않는다는 것입니다. 각자 주어진 역할만 하는데 반응간의 상호작용으로 APT가 만들어 집니다.

그리고 APT 는 자신이 가진 특성에 충실하는데, 이러한 상호작용이 에너지의 저장과 사용이라는 형태로 표현됩니다.

또 다른 예시로는 사람의 배고픔이라는 느낌의 반응 과정입니다.

사람이 배고픔과 포만감을 느끼는 것은 호르몬의 발생과 반응일 뿐입니다.

배고픔 호르몬의 발생과 반응

그림을 보면 위는 자신이 비었다는 신호를 그렐린이라는 호르몬을 통해 알릴뿐입니다.

뇌는 그렐린이라는 호르몬의 농도를 측정하여 먹어야 하는가? 라는 판단을 할 뿐이다.(배고픔 coordination)

그리고 음식이 들어와 인슐린과 렙틴이라는 호르몬이 다양한 기관을 통해서 발생하는데, 뇌는 호르몬의 변화를 감지하여 그만 먹어야 겠다. 는 판단을 할 뿐입니다. (배고픔 coordination)

여기서 재밌었던 부분은 음식이 소화되는 과정에서 인슐린과 랩틴이 발생한다고해서 그렐린의 발생이 멈춘다는게 아니라는 것입니다.

단지 호르몬의 비율이 변경된다는 것 뿐입니다.

저도 이러한 설명을 듣기 전에는 서로간의 명령체계를 가지고 지시한다고 오해하고 있었습니다. 아래 그림처럼요.

잘못된 해석의 예시

그림을 보면 위가 요청하고 뇌가 명령하는 것처럼 보이지만 실제로는 자신의 상태를 호르몬으로 전달할 뿐이고 각 뇌와 위장은 호르몬에 반응할 뿐입니다.

앞서 언급한 것처럼 요소들의 단순한 반응들이 모여 어떠한 활동으로 해석되는 것입니다.

이것이 앨런 케이가 지향하는 객체 지향에 가까울 것이라는 추측을 해봅니다.

앨런 케이의 객체 지향

다시 OOP의 기원 (feat. 객체와 메시지) 으로 돌아가보자겠습니다.

다음 문장이 보다 풍부한 느낌으로 해석되는것처럼 느껴집니다.

Smalltalk's design—and existence—is due to the insight that everything we can describe can be represented by the recursive composition of a single kind of behavioral building block that hides its combination of state and process inside itself and can be dealt with only through the exchange of messages. 스몰토크의 설계와 존재는 우리가 설명할 수 있는 모든 것은 상태와 프로세스의 조합을 내부에 숨기고 메시지 교환을 통해서만 처리할 수 있는 단일 종류의 동작 빌딩 블록의 재귀적 구성으로 표현할 수 있다는 통찰력에서 비롯되었습니다.

상태와 프로세스의 조합을 내부로 숨긴다는 의미는 세포나 각 기관이 자신의 동작원리를 외부로 노출하지 않는다는 의미로 다가오고, 메시지 교환을 통해서만 처리할 수 있는 단일 종류의 동작 빌딩 블록이라는 의미는 세포나 각 기관이 주어진 환경에 반응한다는 의미로 다가옵니다.

재귀적 구성으로 표현할 수 있다는 것은 환경에 반응하는 기관들은 미토콘드리아처럼 필요에 따라 단일 세포내에서도 다수를 구성할 수 있고 동일한 역할의 세포가 하나의 기관을 구성하는 것처럼 하나의 집합으로 만들어갈 수 있다는 것입니다.

Smalltalk's design—and existence—is due to the insight that everything we can describe can be represented by the recursive composition of a single kind of behavioral building block that hides its combination of state and process inside itself and can be dealt with only through the exchange of messages. Philosophically, Smalltalk's objects have much in common with the monads of Leibniz and the notions of 20th century physics and biology. Its way of making objects is quite Platonic in that some of them act as idealizations of concepts—Ideas_—from which _manifestations can be created. That the Ideas are themselves manifestations (of the Idea-Idea) and that the Idea-Idea is a-kind-of Manifestation-Idea—which is a-kind-of itself, so that the system is completely self-describing— would have been appreciated by Plato as an extremely practical joke [Plato]. 철학적으로 스몰토크의 객체는 라이프니츠의 모나드 및 20세기 물리학 및 생물학의 개념과 많은 공통점을 가지고 있습니다. 객체를 만드는 방식은 일부 객체가 개념의 이상화, 즉 이데아로 작용하여 표현을 생성할 수 있다는 점에서 상당히 플라톤적입니다. 이데아 자체가 (이데아의) 표상이며, 이데아가 일종의 표상인 이데아 그 자체라는, 그래서 체계가 완전히 자기 설명적이라는 것은 플라톤에게 지극히 실용적인 농담으로 받아들여졌을 것입니다[플라톤].

객체를 만드는 방식은 일부 객체가 개념의 이상화(idealizations) 라는 말은 후배 덕분에 한 번 더 생각하는 객체 지향 에서 언급된 현상적 세계를 의미합니다. 이상적인 개념을 만들라는 말이죠.

Object-oriented design is a successful attempt to qualitatively improve the efficiency of modeling the ever more complex dynamic systems and user relationships made possible by the silicon explosion. 객체 지향 설계는 실리콘 폭발로 인해 더욱 복잡해진 동적 시스템과 사용자 관계를 모델링하는 효율성을 질적으로 개선하기 위한 성공적인 시도입니다.

요즘처럼 대형 서비스들이 출현함에 따라 요청 & 응답 방식의 구조는 인간이 인지할 수 있는 양을 넘어서기 때문에 통제의 영역에서 넘어갑니다.

우리 생체 시스템도 마찬가지로 아직까지 아는것보다 모르는 상태인 것처럼 복잡하지만, 하나의 개체로 온전하게 동작한다는 것입니다.

그리고 그러한 체계의 기반에는 고유한 요소의 반응에 기반하고 있습니다.

Bob Barton, the main designer of the B5000 and a professor at Utah had said in one of his talks a few days earlier: "The basic principle of recursive design is to make the parts have the same power as the whole." For the first time I thought of the whole as the entire computer and wondered why anyone would want to divide it up into weaker things called data structures and procedures. B5000의 주요 설계자이자 유타대학교 교수인 밥 바튼은 며칠 전 한 강연에서 이렇게 말했습니다: "재귀적 설계의 기본 원리는 부품이 전체와 동일한 힘을 갖도록 만드는 것입니다." 저는 처음으로 전체를 컴퓨터 전체로 생각했고, 왜 데이터 구조와 프로시저라는 약한 부분으로 나누려고 하는지 궁금해졌습니다.

"재귀적 설계의 기본 원리는 부품이 전체와 동일한 힘을 갖도록 만드는 것입니다." 는 특정 기관을 해석하기 위해 세포의 특정을 이해하듯이, 그리고 세포의 특성이 기관의 특성과 유사하듯이 독립적인 성질을 가진 요소들의 집합이 하나의 기관과 같은 효과를 만들 수 있다는 것입니다.

그리고 이러한 개념은 단지 클래스라는 파일에 국한된 것이 아님을 알 수 있습니다.

Why not divide it up into little computers, as time sharing was starting to? But not in dozens. Why not thousands of them, each simulating a useful structure? 시간 공유가 시작될 때처럼 작은 컴퓨터로 나누면 어떨까요? 하지만 수십 대는 아니었습니다. 각각 유용한 구조를 시뮬레이션하는 수천 대는 어떨까요?

요즘 흔한 용어가 된 MSA 가 떠오르는 문장입니다. 개별적인 기능을하는 서버가 모여 하나의 기능을 이루듯이 MSA는 기술에 종속된 기술이 아니라 객체 지향의 거대한 스케일일 뿐입니다.

따라서 MSA 가 어려운 이유는 객체 지향을 해본적이 없는데 트래픽의 처리량만을 목표로 다가가기 때문이 라는 생각이 들었습니다.

그리고 객체 지향이 어려운 이유중 하나는 배움의 시작을 언어를 기반으로 배우기 때문이라는 생각이 드는 문장을 만났습니다.

an OOPL merely focuses the designer's mind in a particular fruitful direction. However, doing encapsulation right is a commitment not just to abstraction of state, but to eliminate state oriented metaphors from programming. OOPL은 단지 디자이너의 마음을 특정한 유익한 방향으로 집중시킬 뿐입니다. 그러나 캡슐화를 올바르게 수행한다는 것은 단순히 상태를 추상화하는 것뿐만 아니라 프로그래밍에서 상태 지향 은유를 제거하겠다는 약속입니다.

객체 지향 언어는 객체 지향을 위해 프로그래머를 도와주는 도구일 뿐이고 보다 중요한것은 상태 지향 은유를 제거하는 것 입니다.

Private은 비밀이다.

제가 2023년 9월경 올린 링크드인 피드 에 클래스의 흔한 논쟁인 getter 와 setter 를 만드는 것에 대해 생각을 공유했습니다.

당시 피드에서도 언급했지만 지금까지 이해한 객체 지향에 따르면 객체를 지향하고 객체를 빌딩 블록으로 구현을 하고 있다면 private 은 외부로 노출하지 않는 고유한 내면의 상태라는 것입니다.

만일 현재 getter, setter 를 고민하고 있다면 스스로 객체 지향을 하고 있는지 고민해볼 필요가 있는 순간입니다.

객체를 지향하다

지향하다. (feat. Object-oriented Programming) 에서 언급한 것처럼 객체를 지향한다는 것은 구현 활동을 함에 있어서 반응하는 개념의 이상화(idealizations) 를 정의하고 그 집합을 만들어 나가겠다는 약속을 한 것입니다.

일회성 기법이 아니고 약속이라고 표현한 이유는 일회성의 설계 기법이나 구현 기법이 아닌 지속적으로 추구해야하는 이상향적 가치이기 때문입니다.

이 기회를 빌어 소중한 정보를 공유해주신 신재웅 이사님께 감사를 표합니다.