객체지향프로그래밍(OOP)

EC kim·2022년 9월 21일
0

<객체지향프로그래밍이란 ?>
하나의 모델이 되는 청사진을 만들고 그 청사진(class)를 바탕으로 한
객체(instance)를 만드는 프로그래밍 패턴

-클래스는 일종의 원형으로 객체를 생성하기 위한 청사진
-인스턴스는 클래스의 사례
-클래스는 객체를 만들기 위한 생성자함수를 포함
-속성과 매서드(객체에 딸린 함수)
-prototype : 모델의 청사진을 만들 때 쓰는 원형객채
-constructor : 인스턴스가 초기화될 때 실행하는 생성자함수
-this : new키워드로 인스턴스를 생성했을 때 해당 인스턴스가 this가
 된다

<객체지향프로그래밍 개념 4가지>

  1. 캡슐화
    -데이터와 기능을 하나의 단위로 묶는 것
    -은닉: 구현은 숨기고 동작은 노출시킴
    -느슨한 결합에 유리: 언제든 구현을 수정할 수 있다.

    = 코드가 복잡하지 않게 만들고 재사용성을 높힌다.

  2. 추상화
    -내부구현은 복잡한데 노출되는 부분은 단순하게 만든다.

    • 캡슐화가 코드나 데이터의 은닉에 포커스를 맞췄다면 추상화는 클래스를 사용하는 사람이 필요하지 않은 매서드 등을 노출시키지 않고 단순한 이름으로 정의하는 것에 포커스가 맞춰져있다.

    = 코드가 복잡하지 않게 만들고 단순화된 사용으로 변화에 대한 영향을 최소화한다.

  3. 상속
    -부모클래스의 특징을 자식클래스가 물려받는 것
    -다중상속 불가

    = 불필요한 코드를 줄여 재사용성을 높힌다.

  4. 다형성
    -하나의 변수명, 함수명 등이 상황에 따라 다른 의미로 해석될 수 있는 것

    = 동일한 매서드에 대해 if/else if와 같은 조건문 대신 객체의 특성에 맞게 달리 작성하는 것이 가능해진다.


<프로토타입>

자바스크립트의 모든 객체는 프로토타입이라는 객체를 가지고 있다. 모든 
객체는 그들의 프로토타입으로부터 프로퍼티와 메소드를 상속받는다. 이처
럼 자바스크립트의 모든 객체는 최소한 하나 이상의 다른 객체로부터 상속
을 받으며 이때 상속되는 정보를 제공하는 객체를 프로토타입이라고 한다.

prototype : 내가 원형일 때 존재 , 함수 객체만 가지고 있다, 생성자를 가지고 있는 원형으로 선언가능
_ proto _ : 모든 객체가 가지고 있다. 인스턴스에 이용하면 부모 클래스의 프로토타입을 탐색할 수 있다.

**프로토타입 체인

프로토타입 체인을 사용하여 객체 지향 프로그래밍의 특성 중 상속을 구현


class문법 사용예시

class Animal {
constructor(name) {
this.speed = 0;
this.name = name;
}
run(speed) {
this.speed = speed;
alert(${this.name} 은/는 속도 ${this.speed}로 달립니다.);
}
stop() {
this.speed = 0;
alert(${this.name} 이/가 멈췄습니다.);
}
}

let animal = new Animal("동물");

class Rabbit extends Animal {
//class 자식클래스 extends 부모클래스 = 부모가 자식한테 상속
hide() {
alert(${this.name} 이/가 숨었습니다!);
}
}

let rabbit = new Rabbit("흰 토끼");

rabbit.run(5); // 흰 토끼 은/는 속도 5로 달립니다.
rabbit.hide(); // 흰 토끼 이/가 숨었습니다!


super : 부모 오브젝트의 함수를 호출할 때 사용
* 생성자에서는 super 키워드 하나만 사용되거나 this 키워드가 사용되기 전에 호출되어야 합니다.

class Human {
constructor() {}
static ping() {
return 'ping';
}
}
class Computer extends Human {
constructor() {}
static pingpong() {
return super.ping() + ' pong';
}
}
Computer.pingpong(); // 'ping pong'

profile
프론트엔드 개발자 일기

0개의 댓글