기존의 절차적 프로그래밍은 함수를 순차적으로 작동했는데 복잡한 어플리케이션을 만듦에 있어 직관적이지 않았다.
이후에 등장한 객체지향 프로그래밍은 사람이 세계를 보고 이해하는 방법을 흉내낸 프로그램 설계 철학이다.
자바스크립트는 객체 지향 언어는 아니지만, 객체지향적으로 코드를 짤 수 있고 현대의 언어들은 대부분 객체 지향의 특징을 갖고 있다. (대표적으로 Java, C++, C# 등)
클래스는, 세부 사항(속성)이 들어가지 않는다.
생성자를 통해 속성을 넣어서 인스턴스를 생성.
은닉화의 기능을 통해 내부 구현과 내부 데이터를 숨기고 객체 외부에서 필요한 동작(메서드)만 노출.
캡슐화와 헷갈리는 개념인데 캡슐화가 코드나 데이터의 은닉에 포커스가 맞춰져있다면, 추상화는 클래스를 사용하는 사람이 필요하지 않은 메서드 등을 노출시키지 않고, 단순한 이름으로 정의하는 것에 포커스가 맞춰져 있다.
클래스 정의 시, 메서드와 속성만 정의한 것을 인터페이스.
하나의 클래스가 부모클래스의 속성과 행동을 얻게 되는 방법.
상속은 코드의 재사용성과 유지보수를 위해 사용.
동일한 메서드에 대해 if/else if와 같은 조건문 대신 객체의 특성에 맞게 달리 작성하는 것이 가능, 같은 행위를 하지만 용도와 목적에 부합하도록 다양한 기능수행과 처리, 결과를 낳을 수 있다.