본문 바로가기
Front-end/JS

자바스크립트 프로토타입 Prototype (1)

by ciocio 2022. 3. 9.

 

(원시 타입을 제외했을 때)
자바스크립트를 이루고 있는 모든 것은 객체다.

 

 

📌 객체지향 프로그래밍 특징?

명령형 프로그래밍   <===>  객체지향 프로그래밍

 

그래서, 객체지향 프로그래밍이 뭔데 ?

프로그램을 객체의 집합 으로 표현하려는 프로그래밍 패러다임 이다.
📎 객체 Object
📎 메서드 Method
📎 속성 Property

 

객체지향 프로그래밍은 실제 세계의 실체를 인식하는 철학적인 사고를 프로그래밍에 접목한 결과다.

현실에서 사물이나 개념은 각자의 '속성'을 가지고 있기 때문에 이를 기준으로 실체를 인식하거나 구분한다.

이 방식을 프로그래밍에 접목시켜보면, 

하나의 객체(사물)는 상태(사물의 색상, 너비, 무게)와 동작(사물의 부피를 구하는 수식)으로 표현할 수 있다.

상태 state는 속성 property/attribute , 동작 behavior은 메서드 method라 부른다.

객체 object  상태 데이터와 동작을 하나의 논리적인 단위로 묶은 복합적인 자료구조다.

 

 

객체지향 프로그래밍과 상반되는, 명령형 프로그래밍은 뭐야 ?

프로그램을 명령어, 함수의 목록 으로 보는 프로그래밍 패러다임 이다.
객체지향 프로그래밍과 명령형 프로그래밍 모두 프로그래밍 패러다임 의 일부다.
객체지향 프로그래밍 은 프로그램을 객체의 집합 으로 바라보지만,
명령형 프로그래밍 명령어와 함수의 목록 으로 본다는 차이점이 있다

 

자바스크립트는 멀티 패러다임 프로그래밍 언어이다.

📍 멀티 패러다임  명령형 + 함수형 + 프로토타입기반 객체지향 프로그래밍

C++과 JAVA는 클래스기반 객체지향 프로그래밍을 지원한다. 프로토타입은 자바스크립트만의 특징이다.

 

 

📌 프로토타입 기반? 클래스 기반?
 

클래스 기반 프로그래밍은 클래스 개념이 존재하고, 상속을 사용한다.
프로토타입 기반 프로그래밍은 클래스 개념이 존재하지 않고,
상속대신 객체의 원형을 복사하는, 복제의 개념을 사용한다.
두 방법 모두 부모 객체로부터 속성과 메서드를 물려받아 사용하거나 변경할 수 있다는 공통점이 있다.

 

일반적으로 객체지향이라고 하면, 클래시 기반의 객체 지향을 의미한다.

클래스를 통해 객체지향을 구현해온 역사가 더 깊기 때문이다.

ex. 클래스 기반의 언어 : JAVA, C++, Python, PHP, Ruby, Object-C

 

📍 클래스기반 객체지향 언어

클래스

 

클래스란, 같은 종류의 집단에 속하는 속성(property/attribute)과 행위(behavior)를 정의한 것이다.

객체지향 프로그램의 기본적인 사용자 정의 데이터 타입이라고 할 수 있다.

즉, 클래스는 객체 생성에 사용되는 패턴이고, new 연산자를 통해 인스턴스화 과정이 필요하다.

모든 인스턴스는 클래스에서 정의된 범위 내에서만 작동하며, 런타임에 그 구조를 변경할 수 없다.

(동적 할당이 가능한 자바스크립트와는 너무 다른 포인트)

이러한 특성은 정확성, 안정성, 예측성 측면에서

클래스기반 언어가 프로토타입기반 언어보다 더 나은 결과를 보장한다.

 

📍 클래스기반 객체지향 언어의 특징

✔ 캡슐화 Encapsulation
✔ 추상화 Abstraction

✔ 상속성 Inheritance
✔ 다형성 Polymorphism
✔ 집합 Aggregation

 

✔ 캡슐화 Encapsulation

정의 : 비슷하거나 서로 관련된 역할을 하는 property와 method들을 하나의 틀 안에 담는 것.

필요한 이유 : 정보 은닉을 위해 → 노출이 필요하지 않은 정보는 숨김.

✔ 추상화 Abstraction

정의 : 대상의 특징 중 프로그래밍에 필요한 속성만 추려 표현하는 것.

필요한 이유 : 불필요한 정보를 제거하기 위해 → 코드의 가독성을 높임. 

✔ 상속성 Inheritance

정의 : 부모 객체의 속성과 메서드를 이어받아 사용할 수 있는 것.

필요한 이유 : 코드의 불필요한 중복을 줄이기 위해 → 코드의 재사용성을 높임.

✔ 다형성 Polymorphism

정의 : 객체의 property와 method가 다양한 타입을 받아들일 수 있는 것.

필요한 이유 : 기능의 확장과 변경의 편리성 위해 → 코드의 재사용성을 높임.

✔ 집합 Aggregation

정의 : 여러 객체를 합쳐 하나의 객체를 만드는 것.

필요한 이유 : 분리된 모듈을 모아 하나의 기능을 구현하기 위해 → divide&concuer 해당. 


📍 프로토타입기반 객체지향 언어

객체 (Feat. 다양한 생성 방법)
• 객체 리터럴
• Object 생성자 함수
• 생성자 함수
• Object.create 메서드
• 클래스 (ES6)

 

자바스크립트는 프로토타입 prototype 을 기반으로 상속을 구현한다.

JAVA나 C++와 같은 클래스 개념은 없는 대신, 별도의 객체 생성 방법이 존재한다.

반응형

댓글