[JavaScript] 객체지향 프로그래밍

play·2022년 5월 26일
0

JaveScript

목록 보기
7/10
post-thumbnail

객체지향이 무조건 좋은 건 아니다.
메모리 관리가 중요하다 -> 메모리를 적게 쓰는 절차지향
사람들과의 협업이 필요 -> 코드 이해가 쉬운 객체지향
용도에 맞게 쓰면 됨.


절차지향객체지향
특성컴퓨터의 처리구조와 유사사람의 사고방식에 가까움
메모리 사용적음많음
처리 속도빠름느림
재활용성낮음높음
코드이해어려움쉬움
디버깅어려움쉬움

1. 객체지향 프로그래밍 이해하기

📌 OOP의 특성

1. 캡슐화

데이터(속성)와 기능(메소드)을 하나의 객체 안에 넣어서 묶는 것

2. 추상화

내부 구현은 복잡, 실제로 노출되는 부분은 단순

고차함수(filter, map, reduce)도 하나의 추상화로 볼 수 있다.

3. 다형성

똑같은 메소드라 하더라도 다른 방식으로 구현될 수 있다.

  • 부모class 메서드를 자식class가 상속을 받아서 제각각 다양한 형태로 마음대로 쓸 수 있다.
  • 똑같은 메서드를 썼는데 자식은 다른 형태로 나오는 것 = 오버라이딩

4. 상속

부모 클래스의 특징을 자식 클래스가 물려받는 것
"extends"


2. 자바스크립트 객체지향적으로 쓰기

자바스크립트의 객체지향 언어는 프로토타입을 기반으로 한다.
자바스크립트의 클래스는 프로토타입을 기반으로 한다.

프로토타입

"자바스크립트 오브젝트를 어딘가에서 어딘가로 상속하기 위한 매커니즘이다."

프로토타입은 상속을 위해 있는 것.

  • 휴먼에서 휴먼의 프로토타입 접근 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;
    }
}

super

  • 부모의 생성자를 실행해주는 역할
  • 그래야 부모의 속성과 메소드를 쓸 수 있게 해줌
  • 슈퍼는 무조건 그냥 써줘야함
  • 슈퍼와 extends 는 뗄 수 없는 관계
  • 꼭 불러줘야하며 2번이상 사용 금지
profile
블로그 이사했습니다 🧳

0개의 댓글