객체지향이 무조건 좋은 건 아니다.
메모리 관리가 중요하다 -> 메모리를 적게 쓰는 절차지향
사람들과의 협업이 필요 -> 코드 이해가 쉬운 객체지향
용도에 맞게 쓰면 됨.
절차지향 | 객체지향 | |
---|---|---|
특성 | 컴퓨터의 처리구조와 유사 | 사람의 사고방식에 가까움 |
메모리 사용 | 적음 | 많음 |
처리 속도 | 빠름 | 느림 |
재활용성 | 낮음 | 높음 |
코드이해 | 어려움 | 쉬움 |
디버깅 | 어려움 | 쉬움 |
데이터(속성)와 기능(메소드)을 하나의 객체 안에 넣어서 묶는 것
내부 구현은 복잡, 실제로 노출되는 부분은 단순
고차함수(filter, map, reduce)도 하나의 추상화로 볼 수 있다.
똑같은 메소드라 하더라도 다른 방식으로 구현될 수 있다.
부모 클래스의 특징을 자식 클래스가 물려받는 것
"extends"
자바스크립트의 객체지향 언어는 프로토타입을 기반으로 한다.
자바스크립트의 클래스는 프로토타입을 기반으로 한다.
휴먼에서 휴먼의 프로토타입 접근 Human.prototype
자바스크립트는 프로토타입 기반언어기 때문에 프로토타입 없이는 모든 일들이 불가능하다.
휴먼이란 클래스에서 인스턴스 만들기 위해선 new
키워드를 사용
김코딩에서 슬립을 쓰고 싶다면, kimcoding.sleep()
인스턴스에서 프로토타입 접근 : __proto__
결론 : 휴먼의 프로토타입과 김코딩의 __proto__
는 같다.
.__proto__.__proto__
이런식으로 프로토타입의 최상위 부모를 찾을 수 있다. 왜? 체이닝 되어 있기 때문에.
constructor초기화 하고 싶다면 이렇게.
매개변수 초기화 가능.
class Bee extends Grub {
constructor(age, color, job){
super(age, color);
this.job = job;
}
이렇게 깔끔하게 쓸 수는 있지만 이게 복잡하게 되면 수퍼의 순서를 맞춰주기가 너무 어려워진다.
그래서 애초에 슈퍼는 어차피 상속했으니 불러줘야하므로 하나씩 더 써줘서 덮어 씌우는 게 낫다고 봄
class Bee extends Grub {
constructor(age, color, job){
Super();
this.age = age;
this.color = color;
this.job = job;
}
}