Oops, All Code!/📝 Study Notes
[JS] 프로토타입의 필요성
밍동망동
2023. 3. 20. 00:00
1. 객체지향
자바스크립트는 객체 기반의 언어기 때문에
자바스크립트를 이루는 거의 모든 것이 객체이다.
원시 타입을 제외한 모든 값은 객체다.
객체지향 프로그래밍은 실체에 속성을 부여하는 사고와 프로그래밍의 결합이다.
예를 들어,
'민다'의 성별이 여성이며 대학생이라는 속성을 표현해
'민다'라는 하나의 사람을 구별하는 것이다.
이처럼 속성을 통해 여러 개의 값을 하나의 복합적인 자료구조로
만드는 것이 객체지향적 프로그래밍의 패러다임이다.
객체는 상태와 동작을 묶은 복합적인 자료구조이다.
이때 상태 데이터를 프로퍼티(property),
동작은 메서드(methode)라고 부른다.
2. 추상화
'민다'라는 객체를 만들 때 여러 속성 중에서
작성할 프로그램에 필요한 속성만 갖추는 것을
추상화라고 한다.
3. 프로토타입
상속은 어떤 객체의 프로퍼티와 메서드를
다른 객체가 그대로 사용할 수 있는 것을 말한다.
JS는 프로토타입을 기반으로 불필요한 중복을 제거한다.
중복을 제거해 기존 코드를 재사용하며, 개발 비용을 줄일 수 있다.
function Minda(age) {
this.age = age;
this.gatName = function(name) {
this.name = name;
ruturn this.age + this.name
};
}
const minda1 = new Minda(20);
const minda2 = new Minda(23);
console.log(minda1.getName(ming));
console.log(minda2.getName(mang));
이 경우 문제가 발생한다.
Minda 생성자 함수로 인스턴스를 생성할 때마다 getName을 중복한다는 것이다.
이러한 동작은 메모리를 불필요하게 낭비하며 쓸데없는 개발비용이 발생한다.
이러한 상황에서 상속을 통해 불필요한 중복을 제거하기 위해
사용되는 것이 바로 프로토타입이다.
자바스크립트는 프로토타입(prototype)을 기반으로 상속을 구현한다.
function Minda(age) {
this.age = age;
}
Minda.prototype.getName = function(name) {
this.name = name;
ruturn this.age + this.name
};
const minda1 = new Minda(20);
const minda2 = new Minda(23);
console.log(minda1.getName === minda2.getName); // true