생성자가 extend 하지 않은 것들은 다 주 생성자가 됨.
class NormalItem extends Item {...
에선 NormalItem이 부 생성자가 됨. Javascript는 주 생성자의 인스턴스가 부 생성자를 체이닝 시켜주는 식.
javascript 언어에선 this 를 데이터 형식으로 넘겨줄 수 있기 때문에 부모 자식 상속 관계에서도
부모로 부터 시작해 자식에게 내려갈 때 데이터를 하나씩 추가해가는 식으로 할 수 있다.
ex) Function을 상속받으면 내 인스턴스는 Function. Date을 상속받으면 내 인스턴스는 Date (Object를 상속받은게 아님)
Function과 Arrow 함수의 차이
Function :
- Function만의 this가 생성됨(this 는 메소드이기 때문에 통용된다 -> ES6 부턴 prototype 방식으로 메소드를 만들면 안되므로 Function으로 this가 들어올 일은 없음.
클래스의 메소드 구문으로 만들 것이기 때문)
- argument 객체가 생성(Rest 인자로 대체 가능)
=> 따라서 Function을 쓸 일은 없다 (ES6 세계에선 Function이란 키워드 자체를 사용하면 안됨, Function은 하위 호환성을 위해서 있는 키워드
강사님 코드를 보면 arrow 함수 또는 클래스의 메소드 만 사용함)
modern 코드에선 arrow와 클래스 구문을 이용한 메소드 밖에 없음.
되도록 이면 부모형을 받아야 후에 그 자리를 다양한 자식들이 와서 메꿔줄 수 있음.
그러므로 되도록이면 부모형을 받고 나중에 자식형을 확장해 나아가는 구조를 사용해야 함.
객체지향에선 Polymorphism을 통하여 추상형으로 받으려고 한다. 왜 보다 구체적인 구상형을 쓰지 않고 제약적이고 어려운 추상형을 받으려고 할까?
=> 다양한 알고리즘이 와도 기존에 있던 구조는 동작을 한다.
특정 메소드는 자신의 내부 코드가 동작되어야 할 책임이 있는데 미래에 어떤 형식의 데이터가 와도 동작하며
특정타입에 의존하지 않고 보다 넓은 타입들에 의존하는 알고리즘. 공통적으로 적용할 수 있는 알고리즘으로 구성되야 함.
=> 일반화 된 알고리즘을 짜야지만 알고리즘이 순수하게 하는 일을 파악할 수 있기 때문. (제네릭 프로그래밍)
일반적으로 알려진 것은 제네릭 타입이지만 제네릭 하게 만들 수 있는 건 타입 뿐만 아니라 알고리즘 그외에 것들도 모두 제네릭하게 만들 수 있음.
제네릭한 알고리즘을 도출하기 위해서 더 추상적인 형을 받는 것임.
형태를 구체적으로 정하려 할수록 협의적으로 구성됨. 제약조건(if 문과 같은 조건문)이 들어가면서 코드가 지저분해짐
자식들이 해결해야하는 공통적인 문제(중복코드)는 자식들한테 남아있는 대신에 부모(메서드)로 빼놓는게 중복을 방지할 수 있음.
이러한 이유로 추상형을 지향하는 것임.
자식마다 따로 처리할 로직은 '자식'에
자식마다 공통적으로 처리할 로직은 '부모'에.
'FrontEnd > CodeSpitz 강의 정리' 카테고리의 다른 글
코드스피츠 s81 1주차 (0) | 2019.04.03 |
---|---|
코드스피츠 4주차 복습 (0) | 2019.03.20 |
디자인 패턴 5주차 수업 정리 (0) | 2019.03.13 |
동기, 비동기, blocking, non-blocking, 콜백함수 및 Promise 정리 (0) | 2019.03.10 |
80 abstract_factory (0) | 2019.03.06 |
댓글