객체 지향 프로그래밍(Object-Oriented Programming, OOP)이란 컴퓨터 프로그램을 어떤 데이터를 입력받아 순서대로 처리하고 결과를 확인하는 것이 아니라, 프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다.
1. 코드 재사용이 용이하다. 동료가 만든 클래스를 사용할 수 있고 상속을 통해 확장해서 사용이 가능하다.
2. 유지보수가 비교적 쉽다. 절차 지향 프로그래밍에서는 코드를 수정하기 위해 하나씩 찾아서 수정해야 하지만, 객체 지향 프로그래밍은 클래스 내부에 변수 혹은 메서드로 존재하기 때문에 그 부분만 수정하면 된다.
1. 처리 속도가 절차 지향 프로그래밍에 비해서 느리다.
2. 설계시 많은 시간과 노력이 필요하다.
setter 메서드를 사용해서 프로퍼티를 값을 선언하면 해당 객체를 사용하는 동료가 적절하지 않은 값으로 설정하는 것을 보호할 수 있다. 또한, 숨기고자 하는 프로퍼티 이름 앞에 언더바를 사용할 수 있다.
getter 메서드 프로퍼티의 값을 읽는 용도로 사용한다. 그렇기 때문에 파라미터를 따로 써줄 필요 없다.
캡슐화 - 코드나 데이터를 외부에서 접근하지 못하도록 한다.
추상화 - 클래스를 사용하는 사람이 필요하지 않은 메서드를 노출 시키지 않고 단순히 이름으로 정의하는 것이다.
사람이라는 클래스가 있다고 가정해보자. 기본적으로 이름 성별 나이 같은 속성이 있다. 그리고 먹다 자다 같은 메서드가 있다. 이제 추가로 학생이라는 클래스가 있다고 가정해보자. 이때 앞서 구현했던 사람클래스의 속성과 메서드를 다시 구현한다면 비효율적일 것이다. 상속을 이용하여 학생 클래스는 사람 클래스를 상속받을 수 있다.
예를들면 멀티탭을 다형성 개념으로 접근한다면 선언부분은 구멍이 두 개 뚫린 부분이라고 할 수 있다. 구현 부분은 멀티탭에 연결하는 전원 케이블이다.
이 멀티탭에 연결하려면 전원케이블은 반드시 연결 부분이 두 개 튀어 나와 있어야 하며, 튀어 나와 있는 부분이 한 개거나 세 개여서는 절대 안되고 튀어 나온 부분이 사각형이어도 안되고 반드시 둥그런 원형이어야 한다.
다형성 선언 - 인터페이스, 추상클래스
다형성 구현 - 클래스
TypeScript의 예제로, name이라는 속성이 존재한다. 그러나 private 키워드가 붙어 있어서, 클래스 내부에서만 사용 가능하다.
java나 TypeScript 언어는 언어의 주요 기능으로 interface가
있다. 그러나 이러한 부분은 JavaScript에는 존재하지 않는 기능이다.