OOP(Object-oriented programming)

Yein Moon·2021년 7월 19일
0

개발일지

목록 보기
20/21

왜 사용할까?

객체 지향 패턴으로 작성하면 데이터와 기능을 직관적으로 이해할 수 있고 불필요한 많은 내용을 반복적으로 작성하지 않고 재사용하기 용이하다.

동일한 prototype(class)를 찍어내어 여러 instance object를 만들 수 있다.

객체지향 프로그래밍의 네가지 주요 컨셉

  1. Encapsulation
  2. Inheritance
  3. Abstraction
  4. Polymorphism

class와 상속

class 클래스 extends 부모클래스 { // 상속받아 확장시키겠다
  constructor(속성들 ...) { // 초기값 설정
    super(상속받을 속성들 ...)
    // 상속받은 속성들을 사용하려면 super()
    this.OOO = OOO;
    this.XXX = XXX;
    ...
  }
  메소드(){
    return super.상속받은메소드() + ... ;
	// 상속받은 메소드를 사용하려면 super.
  }
}
  
let 공장에서_찍어낸것중_하나 = new 클래스(이속성, 저속성 ...)

Prototype__proto__

class를 한번 만들면 클래스 이라는 객체(함수로서 존재), 클래스의 prototype(찍어내는 공장)이라는 객체가 생성된다.

이 둘은 서로를 참조한다.
클래스에는 자동으로 prototype 이라는 속성이 생기고 이것은 클래스의 prototype을 가리킨다.
반대로 클래스의 prototype에는 constructor가 담기며
이것은 클래스를 가리킨다.

클래스.prototype.constructor === 클래스 를 이해할 수 있다.

만약 이 class에 메소드를 추가한다면 공장에 추가된다.클래스의 prototype에 들어가는 것이다.
그냥 클래스에서 메소드를 찾아보려해도 찾을 수 없다. 왜냐면 클래스는 초기값 속성들로만 이루어진 함수니까!

그래서 function으로 객체 생성 시 메소드를 정의하고자 할 때
클래스.prototype.메소드 = 어쩌구저쩌구 라고 썼던 것이다!

class를 이용해 새로운 객체인 클래스공장출신객체를 찍어냈다고 생각해보자. 찍혀진 객체는 자동으로 추가적인 속성인 __proto__을 가진다.
__proto__는 어떤 공장 출신인지 나타내준다. 즉, 클래스의 prototype을 가리킨다.

클래스공장출신객체.__proto__ === 클래스.prototype 이 그 말이다!

그리고 이 클래스공장출신객체는 출신 공장의 메소드를 쓸 권한이 있다.
자신(정확히는 자신의 prototype)이 가진 메소드는 B뿐이더라도, 공장(클래스 prototype)에서 A 메소드를 사용한다면 이 객체는 A 메소드를 사용할 수 있다.

클래스공장출신객체.객체에겐없는메소드 === 클래스.prototype.객체에겐없는메소드

참고영상

profile
마스크 벗을 때쯤엔 주니어개발자 될끄니까

0개의 댓글