OOP!!!!!

Seonmi Choi·2020년 11월 16일
0
  1. OOP(Object Oriented Programming)가 무엇인지?
  • 여러가지 기능을 Class(like blueprint)라는 단위로 '구분'하여 부분부분을 재활용
    (상속의 기능이 있기때문에) 할 수 있게 한다.
  • 작게 구분하는 단위가 Class이고, 이러한 Class를 사용해서 코딩하는 것을 객체 지향형 프 로그래밍(Object Oriented Programming) 이라고 한다.
  • 하나의 묶음 지향한다는 의미이다.
  • Object = variables(property) and methods(변수와 메소드의 묶음)
  • subclass 는 superclass 의 properties and methods를 상속 받는다.
  • polymorphism(다형성)이란 : when a method inherited from a base class is redefined(기본 클래스에서 상속 된 메서드가 재정의 될 때)

- oop의 기본적인 특징

*캡슐화(Encapsulation) : (정보은닉)

  • 하나의 주 된 사물의 정보나 작동을 주 된 오브젝트에 담는다 캡슐화한다고 한다.
    *추상화(abstraction)
  • EndUser에게 단순하고 간편한 모습을 보이고, 내부적인 작동 원리나 구조는 숨겨서 물건 이나 웹을 사용하는 사용자들이 편리하게 사용할 수 있도록 하는 것을 의미한다.
    상속(Inheritance)
    -부모(베이스)가 되는 요소의 특징(속성과 메소드)을 물려 받는 것을 의미한다. 상속이 왜 필요하냐고 말한다면 중복적인 기능을 제외하고 추가적인 기능만 추가함으로써 나중에 코드 에 대한 유지와 보수를 좀 더 간편하기 때문이다. 코드의 재사용율을 높인다.
    다형성(Polymorphism)
  • when a method inherited from a base class is redefined(기본 클래스에 서 상속 된 메서드가 재정의 될 때), 강점은 상속해서 보존하고, 추가되는 부분만 다시 정의를 해주는 것
  1. JavaScript에서 Object를 생성하는 여러가지 방법들
  • 함수를 이용해서 만들수 있다. 이유는 함수도 객체이기 때문이다.
  1. JavaScript에서 Prototype은 무엇이고 왜 사용해야 하는지?
  • 프로토 타입 객체는 데이터를 넣어두려는 목적보다는 하나의 틀로 사용하기 위해 만든다.
  • 인스턴스 객체를 만들때 메모리의 효율적인 관리를 위함.
  1. --proto--, constructor, prototype 이 각각 어떤 관계를 가지고 있는지 조사해봅니다.
  • --proto-- 는 [[Prototype]]과는 다르다. [[Prototype]] 의 getter(획득 자)이자 setter(설정자)이다.
  • [[Prototype]]
    함수를 포함한 모든 객체가 가지고 있는 internal slot이다.
    객체의 입장에서 자신의 부모 역할을 하는 프로토타입 객체를 가리키며 함수 객체의 경우 Function.prototype를 가리킨다.
  • prototype 프로퍼티
    함수 객체만 가지고 있는 프로퍼티이다.
    함수 객체가 생성자로 사용될 때 이 함수를 통해 생성될 객체의 부모 역할을 하는 객체(프 로토타입 객체)를 가리킨다.
let insects = {
  eats: true
};
let ant = {
  fast: true
};

ant.__proto__ = insects; // (*)

// 프로퍼티 eats과 fast를 ant에서도 사용
alert( ant.eats ); // true (**) // from insects
alert( ant.jumps ); // true
  • (*)로 표시한 줄에선 insects이 ant의 프로토타입이 되도록 설정

  • “ant의 프로토타입은 insects입니다.” 혹은 "ant는 insects를 상속받는다."라고 말할 수 있음.

  • 프로토타입을 설정해 준 덕분에 ant에서도 insects에 구현된 유용한 프로퍼티와 메서드를 사용할 수 있다.

  • 이렇게 프로토타입에서 상속받은 프로퍼티 =>'상속 프로퍼티(inherited property)'

  • constructor의 역할 : to create object from class from which it is being created.(class 내에서 객체를 생성하고 초기화하기 위한 특별한 메서드)

  • class는 constructor라는 이름을 가진 특별한 메서드를 하나씩만 가진다.

  • constructor 메서드는 super 키워드를 사용하여 super class의 생성자 메서드를 호출 할수 있다.

  • 생성자 메서드를 지정하지 않은 경우엔 기본 생성자 메서드를 사용한다.

  1. Object.create 메소드에 대해 이해합시다.
  • --proto-- 대신 Object.create 메서드들을 사용
let insects = {
  eats: true
};

// 프로토타입이 insects인 새로운 객체를 생성합니다.
let ant = Object.create(insects);

alert(ant.eats); // true

alert(Object.getPrototypeOf(ant) === insects); // true

Object.setPrototypeOf(ant, {}); // ant의 프로토타입을 {}으로 바꿉니다.
  1. ES6 class 키워드 및 super 키워드 이용 방법을 알아봅니다.
  • 클래스 상속(Class Inheritance)은 코드 재사용 관점에서 매우 유용하다. 새롭게 정의 할 클래스가 기존에 있는 클래스와 매우 유사하다면, 상속을 통해 그대로 사용하되 다른 점 만 구현하면 된다. 코드 재사용은 개발 비용을 현저히 줄일 수 있는 잠재력이 있으므로 매 우 중요하다.

  • extends 키워드

    • extends 키워드는 부모 클래스(base class)를 상속받는 자식 클래스(sub class)를 정의할 때 사용한다.
  • 오버라이딩(Overriding)
    상위 클래스가 가지고 있는 메소드를 하위 클래스가 재정의하여 사용하는 방식이다.

  • 오버로딩(Overloading)
    매개변수의 타입 또는 갯수가 다른, 같은 이름의 메소드를 구현하고 매개변수에 의해 메소드를 구별하여 호출하는 방식이다. 자바스크립트는 오버로딩을 지원하지 않지만 arguments 객체 를 사용하여 구현할 수는 있다.

  • 프로토타입 체인은 특정 객체의 프로퍼티나 메소드에 접근하려고 할 때 프로퍼티 또는 메소드 가 없다면 [[Prototype]] 내부 슬롯이 가리키는 링크를 따라 자신의 부모 역할을 하는 프로토타입 객체의 프로퍼티나 메소드를 차례대로 검색한다. 그리고 검색에 성공하면 그 프로 퍼티나 메소드를 사용한다.

  • super 키워드

    • super 키워드는 부모 클래스를 참조(Reference)할 때 또는 부모 클래스의 constructor를 호출할 때 사용한다.
    • super 메소드는 자식 class의 constructor 내부에서 부모 클래스의 constructor(super-constructor)를 호출한다.
    • 즉, 부모 클래스의 인스턴스를 생성한다.
const Grub = require('./Grub');

class Bee extends Grub{//Grub이 부모 클라스에서 상속한다고 정의
  constructor() {
    super (); // 부모의 생성자를 호출
    this.age = 5;
    this.color = 'yellow';
    this.job = 'Keep on growing';
  }
  eat () {
    super.eat(); //부모 클래스(Base Class)에 대한 참조
  }
}

module.exports = Bee;
  • require()함수는 module.exports를 리턴한다.
  • require() 함수는 모듈을 불러오기 위한 함수이다.
  • module.exports 는 파일의 결과를 반환하는 것이다.
profile
I am not afraid of learning!

0개의 댓글

관련 채용 정보