객체 지향 언어를 이야기 하기 전에 객체를 알아야 한다.
객체는 연관되어 있는 데이터를 한데 묶어 관리하는 단위를 말한다고 할 수 있다.
객체 지향과 반대말을 생각해 본다면 절차 지향을 말할 수 있다.
절차 지향은 순서를 중요시 하는 방향을 말한다.
그렇다보니 절차 지향은 비슷한 유형은 유형대로 묶어 두는 것이
절차적으로 실행하기에 효율적이라고 볼 수 있다.
하지만 이 방법은 컴퓨터에게는 좋지만 사람이 이 절차를 보고 이해하는데는
시간이 걸릴 수밖에 없다. 조금 있는 코드라면 문제가 없지만
몇백줄, 몇천줄에 해당하는 코드라면 코드를 절차적으로 따라가면서 이해하는데
많은 시간이 필요하고 유지보수할때마다 어디가 문제가 생겼는지 파악하는데에도
어려움을 겪게된다.
그래서 다소 사람이 코드를 이해하는데 유리하게 작은 단위로 필요한 데이터나
함수들을 묶어서 객체로 관리하는 객체 지향 언어를 사용하게 되었다.
JavaScript는 객체 지향 언어로 개발되지 않았다. 그래서 객체 지향 언어라고 할 수는 없다.
class를 이용해서 사용할 수 있다.
객체 지향 프로그래밍이 가지는 4가지 특징이 있다.
캡슐화(Encapsulation)
데이터와 코드를 외부로부터 영향을 받지 않게 하고 데이터의 역할, 기능단위로 만드는 캡슐형태다.
상속(Inheritance)
상위 클래스의 속성을 하위 클래스가 물려 받는것 이다.
추상화(abstraction)
추상화는 필요없는 특성은 제거하고 공통적인 속성과 기능을 추출하여 정의하는것을 말한다
다형성(Polymorphism)
상위 클래스의 특징을 가지고 있지만 하위 클래스만의 다양한 형태의 클래스가 존재함을 말한다.
상속되었을 때 자식이 부모의 유전자를 가지고 있지만 자식만의 특징을 가지고 있는 것과 비슷하다.