프로그램을 데이터와 처리방법으로만 나누는게 아니라 프로그램들을 여러 "object(객체)"라는 단위로 나누어 서술하는 것으로 객체는 변수와 메소드의 묶음이라 볼 수 있다.
초기의 프로그래밍 방식은 절차적 프로그래밍 방식이었는데 이는 명시된 순서대로 처리하고 그 결과를 내는 것으로 어떠한 논리를 순서대로 나열하는 것과 같았다. 이러한 방식은 복잡해질수록 순서도로 표현하는게 어려워 예를 들어 이 코드는 어디에서 작동하는지 어디까지 이어지는지를 다른 사람은 물론 본인이 만든 코드조차 파악하기 어려워지는 문제가 있었다. 이러한 문제점을 해결하기 위해 객체 지향 프로그래밍이라는 프로그램 설계방법론이 만들어졌다.
데이터(변수)와 기능(함수)을 하나의 단위로 묶는 다는 개념
추상화는 내부 구현은 아주 복잡한데, 실제로 노출되는 부분은 단순하게 만든다는 개념
상속은 부모 클래스의 특징을 자식 클래스가 물려 받는 개념
형태가 같지만 다른 기능을 수행하는 개념
조금씩은 결이 다르지만 큰 줄기로 보면 코드의 중복과 불필요한 재사용을 막기 위한 설계 방법론들이라 할 수 있다.