JavaScript: OOP (Obejct-oriented programming)

이토니·2024년 1월 15일
0

JavaScript

목록 보기
21/33
post-thumbnail

OOP (Object-oriented programming)

  • 객체지향 프로그래밍은 여러 개의 독립된 단위 "객체"들의 모임으로 컴퓨터 프로그램을 파악한다.

명령어의 목록을 나열 (절차 지향)
➡️ 하나의 문제 해결을 위한 독립된 단위인 객체 (객체 지향)

객체지향의 특징

1) 자료 추상화 (Abstraction)

  • 불필요한 정보는 숨기고, 중요한 정보만을 표현함을써 프로그램을 간단히 만드는 것이다.

2) 상속 (Inheritance)

  • 새로운 클래스가 기존의 클래스의 자료와 연산을 이용할 수 있게 하는 기능이다.
  • 상속을 통해 클래스 간의 종속 관계를 형성함으로써 객체를 조직화할 수 있다.

Sub class

  • extends 키워드를 사용하여 부모 클래스를 자식 클래스에 확장한다.

super()

  • 자식 클래스 내에서 부모 클래스의 생성자, 메소드를 호출할 때 사용한다.
class Person {
    constructor(name, email) {
        this.name = name;
        this.email = email;
    }

    introduce() {
        return `Hello my name is ${this.name}`;
    }
}

class Client extends Person {
    constructor(name, email, phone, address) {
        super(name, email);

        this.phone = phone;
        this.address = address;
    }
}

const john = new Client('john', 'john@abc.com', '010-000-1111', '서울');
console.log(john);

javascript prototype

  • 자바스크립트 객체가 다른 객체로부터 메서드와 속성을 상속받는 메커니즘이다.
  • 프로토타입 체인 (prototype chain) 이라고도 한다.
  • 어떠한 메소드나 프로퍼티를 사용할 때 계속 올라가며 해당 메소드나 프로퍼티를 찾아 올라간다.
  • prototype chain의 마지막은 null이다.
  • 이로 인해 더 적은 메모리를 사용하며, 코드를 재사용할 수 있다.
  • 모든 객체는 global Object prototype을 가진다.
  • 콘솔 창에서 prototype ~ 부분은 생성자 함수에게 상속받은 부분이다.

Obeject.create()

  • 객체의 prototype 지정해주기
// Object.create()
function Person(name, email, birthday) {
    let person = Object.create(personsPrototype);
    person.name = name;
    person.email = email;
    person.birthday = new Date(birthday);
    return person;
}

3) 다형성 (Polymorphism)

  • poly(많은) + morph(형태)
  • 어떤 한 요소에 여러 개념을 넣어놓는 것이다.
  • 같은 메소드라도 각 인스턴스에 따라 다양한 형태를 가질 수 있다.
  • 즉, 객체의 변수나 메서드가 상황에 따라 다른 의미로 해석될 수 있는 것을 말한다.
  • 오버라이딩 (Overriding)을 사용해여 자식 클래스의 메서드가 부모 클래스의 메서드와 다르게 동작하거나 변수가 다른 값으로 지정될 수 있다.
  • ➡️ 일반적인 코드를 재사용하고 작성할 수 있다.
  1. 일반적인 코드
class PaymentGateway {
    constructor() {
        this.connect();
    }
    connect() {
        // 결제 제공업체에 연결
        // ..
    }
    pay(amount) {
        // ..
    }
    refund(amount) {
        // ..
    }
}
  1. paypal 전용 로직
class Paypal extends PaymentGateway {
    pay(amount) {
        // 페이팔 전용 로직을 구현해야 합니다.
    }
    refund(amount) {
        // 페이팔 전용 로직을 구현해야 합니다.
    }
    connect() {
        // 페이팔 전용 로직을 구현해야 합니다.
    }
}
  1. visa 전용 로직
class Visa extends PaymentGateway {
    pay(amount) {
        // Visa 전용 로직을 구현해야 합니다.
    }
    refund(amount) {
        // Visa 전용 로직을 구현해야 합니다.
    }
    connect() {
        // Visa 전용 로직을 구현해야 합니다.
    }
}

4) 캡슐화 (encapsulation)

  • 클래스 안에 관련 메서드, 변수 등을 하나로 묶어준다.
  • 바깥에서의 접근을 막아 보안이 강화되고 코드가 잘 관리될 수 있다.

ES6 Classes

constructor:

  • 인스턴스의 생성과 동시에 클래스 필드의 생성과 초기화를 실행한다.
  • 생략 가능하다.
  • new에 의해 자동 호출된다.

this

  • 클래스가 생성할 인스턴스를 가리킨다.

static

  • 프로토타입이 아닌 클래스 함수 자체에 메서드를 설정할 수 있는데, 이를 정적 메서드라 한다.
  • this.name과 같은 것들을 사용하지 않는 독립적인 것을 정의할 때 사용한다.
  • 사용 시 인스턴스가 아닌 클래스 이름을 이용하여 사용한다.
profile
cool & soft codes

0개의 댓글