[TIL 21] 객체 지향 JavaScript

yezo cha·2021년 6월 15일
0

JavaScript

목록 보기
13/19
post-thumbnail

Achievement Goals

  • 클래스와 인스턴스라는 용어를 이해할 수 있다.
  • new 키워드의 사용법을 이해할 수 있다.
  • class 키워드의 사용법을 이해할 수 있다.
  • Prototype chain을 이해하고 설명할 수 있다. (proto)

객체 지향 프로그래밍이란?

객체 지향 프로그래밍 (Object Oriented Programming)

객체지향 프로그래밍실세계에 존재하고 인지하고 있는 객체(Object)를 소프트웨어의 세계에서 표현하기 위해 객체의 핵심적인 개념 또는 기능만을 추출하는 추상화(abstraction)를 통해 모델링하려는 프로그래밍 패러다임을 말한다.

다시 말해, 우리가 주변의 실세계에서 사물을 인지하는 방식을 프로그래밍에 접목하려는 사상을 의미한다.

객체지향 프로그래밍은 함수들의 집합 혹은 단순한 컴퓨터의 명령어들의 목록이라는 전통적인 절차지향 프로그래밍과는 다른, 관계성있는 객체들의 집합이라는 관점으로 접근하는 소프트웨어 디자인으로 볼 수 있다.

보다 유연하고 유지보수하기 쉬우며 확장성 측면에서서도 유리한 프로그래밍을 하도록 의도되었고, 대규모 소프트웨어 개발에 널리 사용되고 있다.

클래스라고 부르는 데이터 모델의 청사진을 사용해 코드 작성.
자바스크립트가 객체 지향 언어는 아니지만, 객체 지향 패턴으로 코드를 작성할 수 있다.
하나의 모델이 되는 class를 만들고, 그냥 객체가 아닌 "청사진"을 바탕으로 한 객체는 인스턴스 객체(instance object), 줄여서 인스턴스(instance)라고 부른다. 청사진은 클래스(class)라고 부르자.

OOP의 특징

Encapsulation 캡슐화

  • 데이터와 기능을 객체 안에 하나의 단위로 묶는 것.
  • 은닉화(hiding) : 내부 데이터나 구현이 외부로 노출되지 않도록 한다. 디테일한 구현이나 데이터는 숨기고, 객체 외부에서 필요한 메소드만 노출 !
  • 느슨한 결합(Loose Coupling)에 유리 : 언제든지 구현을 수정할 수 있다.
  • Reduce complexity + increase reusability

Inheritance 상속

  • 기본 클래스(base class);부모의 특징을 파생 클래스(derive class):자식가 상속받는다.
  • Eliminate redundant code

Abstraction 추상화

  • 내부 구현은 복잡하지만, 실제로 노출되는 부분은 단순하게 만든다는 개념.
  • Simpler Interface : 추상화를 통해 interface가 단순해진다.
  • Reduce complexity + isolate impact of changes

Polymorphism 다형성

  • Refactor ugly if/else if statements : 동일한 메서드에 대해 if/else if 와 같은 조건문 대신 객체의 특성에 맞게 다르게 작성할 수 있다.

class

ES6부터 새로 도입된 것이 class 개념이다.
ES6 이전에도 클래스와 같은 개념이 있었는데, 바로 Prototype으로 구현 가능한 함수 개념이었다.

클래스는 객체 지향 프로그래밍에서 특정 객체를 생성하기 위해 변수와 메서드를 정의하는 일종의 로, 객체를 정의하기 위한 상태(멤버 변수)메서드(함수)로 구성된다.

class User {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }
  sayHello() {
    console.log(`${this.name} hi hello`);
  }
};

const user1 = new User("yezo");
user1.sayHello();

수정 예정

추상화와 캡슐화는 어떻게 다른가요?

인터페이스(Interface)란 무엇일까요?

JavaScript에서 class 키워드를 사용하면, 메소드의 은닉이 가능한가요?

생성자(constructor) 함수라고 부릅니다. 인스턴스가 만들어질 때 실행되는 코드

profile
(ง •̀_•́)ง

0개의 댓글