OOP는 Object Oriented Programming의 약자로 객체 지향 프로그래밍을 의미한다.이전에 OOP를 다룬 적이 있었지만. 다시 한번 생각을 정리하기로 했다. JavaScript는 객체지향언어가 아니다. 라는 글로 올렸었다.
JavaScript는 객체 지향 프로그래밍이 가능한 언어다. 초기의 프로그래밍 언어는 컴퓨터의 처리와 비슷한 방식으로 코드를 작성했었기 때문에 순서가 절대적으로 중요한 절차적인 언어가 많았다. 당시에는 객체 지향의 개념도 없던 시기였다. C언어가 대표적인 절차적 언어다.
객체 지향 프로그램의 패러다임이 등장하면서 순차적인 작동을 넘어서 데이터 처리 과정의 모형을 만들어내는 방식을 고안했다. 변수 따로 정하고 다른 곳에 그 변수를 활용해서 함수를 구현하는 것이 아니라 변수와 함수를 한데 묶어서 처리하는 것이다.
객체라는 자료형은 모든 타입의 자료형을 다 담을수 있고 데이터 관리에 용이 하기때문에 객체에함수도 변수도 넣어서 객체단위로 데이터를처리하는 모형을 만든 것이다. OOP의 모든 것은 객체로 그룹화가된다. 객체 내에는 데이터와 기능이 함께 있다는 원칙에 따라 메서드와 속성이 존재한다. 동작은 메소드로 상태는 속성으로 표현한다.
OOP의 크게 4가지 특성이 있었다.
Encapsulation, ㅁbstraction, Inheritance, Polymorhpism
캡슐화는 데이터와기능을 하나의 단위로 묶는 것을 말한다. 데이터(속성)와 기능(메소드)을 따로 정의하는 것이 아닌, 하나의 객체 안에 넣어서 묶는 것이다. 데이터(속성)과 기능(메소드)들이 느슨하게 결합되는 것이다.
느슨한 결합은 코드 실행 순서에 따라 절차적으로 코드를 작성하는 것이 아니라, 코드가 상징하는 실제 모습과 닮게 코드를 모아 결합하는 것을 의미한다.
은닉화 - 캡슐화에 은닉화 특성도 있는데 내부데이터, 내부 로직이 외부로 노출되지 않도록 만드는 것이다. 외부로 노출되지 않게 영향이 가지 않게 만드는것을 말한다.
추상화는 구현 원리는 매우 복잡한데 기능은 단순하게 노출시키는 것을 말한다. 이미 만든 것을 사용할 때는 원리를 모두 알 필요가 없다. 기능을 다시 유지보수를 해야할 때는 원리를 알아야겠지만 사용하는 목적이라면 기능은 단순하게 만들어서 생산성을 높이는 것이 추상화의 장점이다. 기술의 발전은 거듭되는 추상화로 만들어졌다고 할 수 있다.
상속은 기본클래스의 특징을 파생클래스가 상속받는다 라는 것이다. 이것도 많이 사용하는 개념이다. 이것은 분류와도 닮은 점이 있다. 분류를 한 것은 비슷한 특성을 모아둔 것이다. 그 비슷한 특성은 상위 단계에서 상속을 받은 것이라고 생각할 수 있다.
다형성은 상속과 관련이 있는데 위에서 비슷한 특성은 상위에 있는 기본 클래스의 특징을 상속받은 특성으로 생각할 수 있다고 했는데 그에 반해 분류를 했을 때 완전히 같지 않은 수 많은 조금씩은 특성이 다른 것들이 있다. 비슷해도 완전히 같지 않은 이 각각의 특성을 지닌 것을 다형성이라고 할 수 있다. 상속받은 특성들은 가지고 있지만 그 나름대로의 개성있는 추가적인 속성이나 기능들을 가지는 것을 다형성이라고 한다.