- 초기의 프로그래밍 언어는 일반적으로 절차적 언어라고 부름
- 절차적 언어는 순차적인 명령의 조합
- '클래스'라고 부르는 데이터 모델의 청사진을 사용해 코드를 작성한다.
- 현대의 언어들은 대부분 객체 지향의 특징을 가지고 있음(Java, C++, C# 등)
- JavaScript는 객체 지향으로 작성이 가능하다.
- OOP는 프로그램 설계 철학 중 하나이다.
- 한 번 만들고 나면, 메모리상에서 반환되기 전까지 객체 내의 모든 것이 유지된다.
- 객체 내에는 "데이터와 기능이 함께 있다'라는 원칙에 따라 메서드와 속성이 같이 존재한다.
- 데이터와 기능을 하나의 단위로 묶는 것
- 은닉(hiding): 구현은 숨기고, 동작은 노출시킨다.
- 느슨한 결합(Loose Coupling)에 유리: 언제든 구현을 수정할 수 있다.
느슨한 결합이란 코드 실행 순서에 따라 절차적으로 코드를 작성하는게 아니라, 코드가 상징하는 실제 모습과 닮게 코드를 모아 결합하는 것을 의미한다.
- 내부 구현은 복잡하지만, 실제로 노출되는 부분은 단순하게 만드는 것
- 인터페이스가 단순해진다.
- 클래스 정의 시, 메서드와 속성만 정의한다.
캡슐화는 코드나 데이터의 은닉에 포커스가 맞춰져있다면, 추상화는 클래스를 사용하는 사람이 필요하지 않은 메서드 등을 노출시키지 않고, 단순한 이름으로 정의하는 것에 포커스가 맞춰져 있다.
- 상속은 부모 클래스의 특징을 자식 클래스가 물려받는 것이다.
그 특징을 자세하게 설명하는 용어는 "기본 크래스(base calss)의 특징을 파생 클래스(derived class)가 상속받는다"로 표현하는 것이 적합하다.- 본질은 같지만 기능을 추가해야 할 때 사용하는 것이 적합하다.
- 객체는 똑같은 메서드라 하더라도, 다른 방식으로 구현할 수 있다.
캡슐화 : 코드가 복잡하지 않게 만들고, 재사용성을 높인다.
추상화 : 캡슐화와 마찬가지로 코드가 복잡하지 않게 만들고, 단순화된 사용으로 변화에 대한 영향을 최소화한다.
상속 : 불필요한 코드를 줄여 재사용성을 높인다.
다형성 : 동일한 메서드에 대해 조건문 대신 객체의 특성에 맞게 달리 작성하는 것이 가능하다.
느린 실행 속도
절차지향 프로그래밍에 비해 느린 실행 속도
필요한 메모리양의 증가
객체 지향 프로그래밍은 캡슐화와 격리구조에 때문에 절차지향 프로그래밍과 비교하면 실행 속도가 느리다. 또한, 객체지향에서는 모든 것을 객체로 생각하기 때문에 추가적인 포인터 크기의 메모리와 연산에 대한 비용이 들어가게 된다.