[엘리스 SW트랙 4기] 3주차 - Day12 - 생성자(new) / class / class 상속 / class super / class private, public // 이터레이터 (작성중)

랸나·2023년 3월 14일
0

객체지향 프로그래밍

counsturtor

  • 생성자 new를 사용함으로써, 보다 편리하게 객체를 양산해낼 수 있음.
  • this를 사용하여 new function으로 객체를 생성함. 이를 통해 수정사항이 있을 때 모든 객체를 수정해야하는 비효율성을 개선시킴.
  • var todayDate = new Date()
  • constructor는 1. 객체를 만든다. 2.초기 상태를 세팅한다.

prototype

  • 자바스크립트를 프로토타입 기반 언어라고도 함.
  • 객체 내부에 메소드가 있고, 그것이 생성자로 사용되면 메소드 자체가 계속 생성됨. 또한 1억개가 있다고 가정할때, 객체 내의 메소드를 수정하려고 하면 출력할 때 1억개를 수정해야함.
  • 이를 해결하기 위해 프로토타입 생겨남.
  • 생성자 함수의 프로토타입(원형)을 만들기.

class

  • 객체를 만드는 공장 (이전에는 constructor이라는 것을 통해 찍어내고 있었음. constructor의 대체제)
  • ECMA SCRIPT6 에서 등장. 이전 버전은 지원하지 않음.
  • 그럴 경우는 https://babeljs.io/ 에서 컴파일 가능.
  • 객체를 생성한 뒤 초기 상태를 세팅.
  • class내부에 메소드 형성할 때는 constructor()을 사용해야함.
  • 클래스는 상태를 가질 수 있고, 수행할 액션(메소드) 도 가질수 있는 객체

class 상속

  • Personpkus에서는 extends를 통해서 중복을 제거하고, Person 안에 있는 것을 공유함 ( 프로토타입이라고 작성되어 있는 것은 상속X)
<script>
class Person{
    constructor(name, first, second){
        this.name = name;
        this.first = first;
        this.second = second;
    }
    sum(){
        return this.first+this.second;
    }
}
class PersonPlus extends Person{
    avg(){
        return (this.first+this.second)/2;
    }
}
 
var kim = new PersonPlus('kim', 10, 20);
console.log("kim.sum()", kim.sum());
console.log("kim.avg()", kim.avg());
</script>

//코드 출처 : https://opentutorials.org/module/4047/24619

super

  • 1) super() - 부모클래스의 생성자 참조/ super.function() - 부모 클래스의 메소드 참조
  • 2) 상속된 자식 클래스에 새로 추가되는 파라미터를 정의하려면 기존 부모 클래스를 다시 정의해주어야 함. 이때 super을 사용하면 중복과 비효율 제거 가능.
<script>
class Person{
    constructor(name, first, second){
        this.name = name;
        this.first = first;
        this.second = second;
    }
    sum(){
        return this.first+this.second;
    }
}
class PersonPlus extends Person{
    constructor(name, first, second, third){
        super(name, first, second); //부모 클래스의 생성자
        this.third = third;
    }
    sum(){
        return super.sum()+this.third;
    }
    avg(){
        return (this.first+this.second+this.third)/3;
    }
}
 
var kim = new PersonPlus('kim', 10, 20, 30);
console.log("kim.sum()", kim.sum());
console.log("kim.avg()", kim.avg());

// 코드 출처 : https://opentutorials.org/module/4047/24620
</script>

private / public

  • public: 어디서든지 접근할 수 있으며 외부 인터페이스를 구성
  • private: 클래스 내부에서만 접근할 수 있으며 내부 인터페이스를 구성할 때 쓰임. / private 필드는 #로 시작하며, 자바스크립트에서 지원하는 문법입니다. #로 시작하는 필드는 해당 필드가 정의된 클래스 내부에서만 접근 가능합니다.

class / object(instance)

  • 자바스크립트의 상속은 자유롭고, 그만큼 더 복잡함.
  • sub object는 super object에서 상속받음.

이터레이터

이터러블

제너레이터

profile
백엔드개발자

0개의 댓글