[JAVASCRIPT] 객체 지향 프로그래밍 OOP 03

김창주·2022년 4월 1일
0

[JS]OOP

목록 보기
3/4

자바스크립트를 구글링해보면 이런 문구가 나온다.

'Javascript is prototype-based programming language'

프로토타입 기반의 프로그래밍 언어이다.
라는 뜻인데, 프로토타입?...

프로그래밍관련 이론 공부는 끊임없는 체인처럼 이루어져서 한가지 좀 알았다 싶으면 새로운 용어가 나온다.

우선 prototype-based programming은 다행히도 객체지향 프로그래밍의 한 종류다. 다행인걸까.?

prototype-based programming 의 이론상 정의에 보면,

클래스가 없고, 클래스 기반 언어에서 상속을 사용하는 것과는 다르게, 객체를 원형(프로토타입)으로 하여 복제의 과정을 통하여 객체의 동작 방식을 다시 사용할 수 있다. 프로토타입기반 프로그래밍은 클래스리스(class-less), 프로토타입 지향(prototype-oriented) 혹은 인스턴스 기반(instance-based) 프로그래밍이라고도 한다.
// 출저 : 위키백과

클래스가 없다고 한다. 이전에 클래스 고생해서 배웠는데, 객체지향 프로그래밍에서 객체 만들려고 클래스 만든다고 하더니, 클래스가 없다...?

사실 없다라는 표현보다는 명확하게는 정의하지 않아도 되는, 즉 객체를 생성할 때 , 클래스를 선언하지 않는 것을 허용해주는 것이다.

Prototype

정말 쉽게 Javascript에서 prototype이 뭔지 부터 이해해보자.

Prototype : 원형. 원래의 형태 또는 전형적인 예, 기초 또는 표준이다.

Free Code Camp 로 공부하면서 간결하게 소개를 해주는 부분이 이해를 많이 도와준다..

Javascript 내에 어떤 객체든 숨겨진 내부 기본속성( properties )를 가지는데, 이를
Prototype이라고 한다.

직역한 내용이지만, 어떤 객체든 이미 Javascript에서는 기본적으로 가지고 있는 속성들이 있고, 이를 제공하고 있다는 내용의 길고 긴 설명이 더 있다.

단어의 의미와 연결시켜보면, 원래 가지고 있는(prototype) 속성(property)이란 말이다.

그래서 자바스크립트에서 객체를 선언 하는데,

var me = { name : "cj" }

이렇게 me라는 객체를 생성하면, 나는 이름만 썼지만, VScode에서 다음 줄에 me 만치고 . 을 입력하면 속성/행위들이 쭉 나열되는 것을 알 수 있다.

클래스를 선언하지도 않았고, 객체 선언때 할당하지 하지도 않은 많은 속성과 행위들이 온 곳이 바로 Object의 prototype이다.(Object.prototype);

마찬가지로 안에 name은 string(문자열) 타입의 자료인데,

me.name.

까지만 쳐도 String의 prototype 속성과 행위들이 나열된다.

이렇게 클래스를 선언하지 않아도 이미 객체에 JS에서 가지는 prototype 속성/행위들을 기본적으로 포함하고 있는 것이다.

profile
으.아.으.아. 하게 만들어줭

0개의 댓글