객체지향 프로그래밍
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());
</script>
private / public
- public: 어디서든지 접근할 수 있으며 외부 인터페이스를 구성
- private: 클래스 내부에서만 접근할 수 있으며 내부 인터페이스를 구성할 때 쓰임. / private 필드는 #로 시작하며, 자바스크립트에서 지원하는 문법입니다. #로 시작하는 필드는 해당 필드가 정의된 클래스 내부에서만 접근 가능합니다.
class / object(instance)
- 자바스크립트의 상속은 자유롭고, 그만큼 더 복잡함.
- sub object는 super object에서 상속받음.
이터레이터
이터러블
제너레이터