프로토타입

hoonnotes

객체지향 프로그래밍이란?

객체란 요소의 상태와 메소드로 구현

객체지향은 여러개의 객체가 각각의 목적에 의해 존재

서로 상호소통을 하여 하나의 어플리케이션 구성

실제 세상에 존재하는 요소들과 비슷하게 구현

객체 중심 패러다임

객체지향을 모르는 사람의 코드

const cookie = { name: "Chocolate Cookie", price: 2800 }
const milk = { name: "Skim Milk", price: 3200 }

const basket = []
basket.push(cookie);
basket.push(cookie);
basket.push(cookie);
basket.push(milk);
basket.push(milk);

const totalPrice = basket
	.map(product => product.price)
	.reduce((prev, cur) => prev + cur, 0)

객체 중심 패러다임

객체지향을 조금 맛본 사람의 코드

const cookie = { name: "Chocolate Cookie", price: 2800 }
const milk = { name: "Skim Milk", price: 3200 }

const basket = new Basket();

basket.addProduct(cookie, 3);
basket.addProduct(milk, 2)
basket.getShoppingInfo();

객체 중심 패러다임

잘 적용된 객체지향 프로그래밍은

문장을 읽듯이 읽어 내려갈 수 있다!

 

클래스를 템플릿으로!

클래스란? 

 

객체의 모양을 설정해주는  템플릿

클래스로 생성된 객체 = 인스턴스

클래스로 객체를 생성하는 작업 = instantiate

 

클래스를 템플릿으로!

function Product(_name, _price) {
  const name = _name;
  const price = _price;
  
  this.getName = function () {
    return name;
  }

  this.getPrice = function() {
    return price;
  }
}

function Basket() {
  const products = []
  
  this.addProducts = function(product, amount) {
    products.push(...Array(amount).fill(product))
  }

  this.calculateTotal = function() {
    return products
      .map(product => product.getPrice())
      .reduce((a, b) => a + b, 0);
  }

  this.getShoppingInfo = function() {
    console.log('총 결제 금액입니다: ' + this.calculateTotal());
  }
}

encapsulation

const milk = new Product("Skim Milk", 3200)
const cookie = new Product("Chocolate Cookie", 2800)

const basket = new Basket() 

cookie.price = 500;
milk.price = 300;

basket.addProduct(cookie, 3)
basket.addProduct(milk, 2);

inheritance

 

  • 클래스의 확장
  • 기존에 구현된 기능에 새로운 기능 추가

inheritance

function Book(_name, _price, _author) {
  Product.call(this, _name, _price);
  const author = _author;
  
  this.getAuthor = function() {
    return author;
  }
}

const faust = new Book('faust', 12.5, 'Goethe');
basket.addProduct(1, faust);

상속과 프로토타입

자바스크립트에는 class가 없다 !?

생성자 함수 ~== 다른 언어의 class

따라서 상속 비슷하게 동작하게

하기 위해 프로토타입 사용!

상속과 프로토타입

function Person(name, age) {
  this.name = name;
  this.age = age;
  this.getPersonalInfo = function() {
    return `${this.name} 은 ${this.age} 살 입니다.`
  }
}

const hoon = new Person("Hoon", 31);
const jimmy = new Person("Jimmy", 28); 

console.log(hoon.getPersonalInfo === jimmy.getPersonalInfo) // false

상속과 프로토타입

Person 생성자 함수

hoon

jimmy

name

hoon

name

jimmy

getPerson..

function

getPerson..

function

동일한 프로퍼티가 중복 생성 !

상속과 프로토타입

function Person(name, age) {
  this.name = name;
  this.age = age;
}

Person.prototype.getPersonalInfo = function() {
  return `${this.name} 은 ${this.age} 살 입니다.`
}


const hoon = new Person("Hoon", 31);
const jimmy = new Person("Jimmy", 28); 

console.log(hoon.getPersonalInfo === jimmy.getPersonalInfo) // true

상속과 프로토타입

Person 생성자 함수

hoon

jimmy

name

hoon

name

jimmy

Person.prototype

getPerson..

function

prototype

상속

Made with Slides.com