brunch

You can make anything
by writing

C.S.Lewis

by 공인식 Aug 25. 2024

프로토타입(Prototype)

우리는 그저 다음 세대를 위한 프로토타입으로서 존재하면 된다.

2화에서 자바스크립트를 다루면서 클래스가 언급되긴 했지만, 사실 자바스크립트는 ‘프로토타입 기반 언어’다. 재미있게도, 프로토타입 속성이라는 것 때문에 자바스크립트는 진화론적 접근을 하게 된다. 내가 프로토타입 속성을 완벽히 이해했다고 정리했을 때, 자바스크립트라는 언어를 만든 브랜든 아이크(Brendan Eich)는 적어도 진화론을 완벽히 이해하고 난 뒤에 자바스크립트를 만들었을 것이라는 생각마저 들었다.


어린 시절, 지구 위의 한 점으로부터 태양계와 우리 은하를 거쳐 단계적으로 확장되는 우주 공간의 무한함을 접하곤, ‘그렇다면 나는 얼마나 허무한 존재인가’를 깨달으며 공포감을 느꼈다. 일종의 공황 상태였다 해야 할까, 베개로 얼굴을 가리고 한참을 울었던 기억은 오랜 시간이 지나도 선명하게 남아 있다.


만약에 생명체가 동작하는 방식을 제일 비슷하게 재현할 수 있는 프로그램이 필요하다면, 요즘 핫한 파이썬보다는 자바스크립트 기반이 제일 적합하다 판단된다. 재현 가능한 단순한 한 개의 생명체뿐 아니라, 세대를 거듭하는 생명체의 원리를 너무 잘 구현해 낼 것임이 분명하다. 아, 물론 프로토타입 기반의 언어라면 그것 또한 적합할 수 있다.


Human 클래스 선언

아래의 코드는 인간 개체의 동작 방식을 설명 혹은 시뮬레이션하기 위한 자바스크립트 클래스다. Human 클래스(생성자)에 부모 개체 정보를 넘기기 위한 인자가 포함되어 있다.


``` javascript

class Human {
     constructor(parents, sex, bloodtype) {
         this.parents = parents;
         this.sex = sex;
         this.bloodtype = bloodtype;
     }
     breathe() {
         // 숨 쉬고
      }
     eat() {
         // 먹고
     }
}

```


아래 코드는 위 클래스 선언을 생성자 함수라는 것과 prototype 속성을 이용한 것으로 바꾼 모습이다. 사실, 자바스크립트의 클래스 문법은 클래스를 만드는 것처럼 보이게 하기 위한 것이고 실행 결과는 이렇게 작성된 것과 다르지 않다.


``` javascript

function Human(parents, sex, bloodtype){
     this.parents = parents; // {} 개체가 들어가야 하는데
     this.sex = sex;
     this.bloodtype = bloodtype;
}
Human.prototype.breathe = function(){
     // 숨 쉬고
}
Human.prototype.eat = function(){
     // 먹고
}

/* 2013-01-19 문제 : 이렇게 부모를 쉽게 정의할 수가 없을 것 같다.
var myFather = new Human();
var myMother = new Human();
내 부모를 정의 내리려면 인간(Human Constructor)에 대한 정의가 먼저 필요한데, 그 인간이란 정의를 위해 계속 parents라는 값이 앞선 개체를 참조해야만 한다. 마찬가지로 나 역시 이렇게 쉽게 정의할 수 있는 게 아니잖아? 성별이나 혈액형 등의 단편적인 결과로도 부족해, 혈액형마저도 부모 개체의 영향을 받잖아 단순 문자열이 아니라고.

var me = new Human();

애초에 가능한 게 아니었던 것 같아, 나를 정의한다는 건. */

```


생식 세포에는 꼭 필요한 메서드만 포함될 것이다.

정자와 난자의 세포에 돈을 잘 버는 방법이라든가 설거지를 밀리지 않고 하는 방법과 같은 세상을 살아가기 위한 현실적인 방법이 들어 있는 속성이나 메서드는 없을 것이다. 숨 쉬고 먹고 배설을 하는 등의 생명체로서 꼭 필요한 것들만 담겨 있을 것이다. 또한, ‘사랑은 그저 호르몬 작용에 불과하다’와 같은 정리를 내린 정보는 유전되지 않을 것이며, 또 그렇게 되지 않아야 한다.


빠르게 깨달음에 이르는 불필요한 메서드가 우리네 세대에 새겨져 유전된다면, 그것은 출산율을 낮추거나 자살률을 높이는 등의 부작용을 초래할 수도 있다.


우리는 다음 세대를 위한 프로토타입이다.

보통 프로토타입이라 하면 ‘정식 출시 전 테스트를 위한 모델’과 같은 것을 떠올릴 수 있다. 우리는 정식 출시된 완성형 모델로 볼 수 있을까? 종의 오랜 존속을 위해서는 완성형이어서는 안 된다. 불완전함은 한편으로 계속 유지되어야 하며, 새로운 세대를 위해 꼭 필요한 메서드만을 프로토타입 속성에 넣어 두었다가 정말 꼭 필요한 것만 클래스에 새겨야 한다. 클래스에 새겨진 것은 다음 세대에 전달될 수 있겠지만, 생식 세포가 가진 제약에 따라 중요도가 낮은 속성이나 메서드는 삭제될 수도 있겠다 짐작된다. 런 가설의 연장선에서라면, 부모 세대가 가진 것 중에 없는 성질이 자녀에게 생긴다는 것은 당연할 수도 있다.


우리는 그저 다음 세대를 위한 프로토타입으로서 존재하면 된다.
프로토타입 속성에 이번 각자의 생에 필요한 메서드만을 담고 살아가면 된다.
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari