객체 지향 프로그래밍 패러다임이 등장하기 전에는 단지 함수를 이동하는 개념 정도만 존재 했다. 하지만 객체 지향 프로그래밍 패러다임의 등장으로 데이터와 기능이 별개로 취급되지 않고 하나로 묶어서 처리가 가능해 졌다.
데이터와 기능을 따로 정의하는 것이 아닌, 하나의 객체 안에 넣어서 묶는 방식(느슨한 결합)이 이루어 진다.
느슨한 결합은 코드의 실행 순서에 따라 절차적으로 코드를 작성하는 것이 아닌, 코드가 상징하는 실제 모습과 닮게 코드를 모아 결합하는 것을 의미한다.
캡슐화는 은닉화의 계념도 포함하고 있는데 내부 데이터나 구현이 외부로 노출되지 않도록 만드는 것이다.
은닉화 특징을 살려 코드를 작성하면 내 메서드의 구현만 수정하고 노출된 메서드를 사용하는 코드 흐름은 바뀌지 않도록 만들 수 있다.
추상화는 내부 구현은 복잡하지만 실제 노출되는 부분은 단순하게 만든다는 개념이다. 하위 요소의 공통점들을 상위 요소로 추려내는 과정이다. 추상화를 통해 인터페이스를 단순화 시킬 수 있다. 많은 기능들이 노출되지 않은 덕분에 얘기치 못한 사용상의 변화가 일어나지 않도로 만들 수 있다.
부모의 클래스의 특징을 자식 클래스가 물려받는 것이다.
변경, 확장하는 것이 가능하도록 만든다.
상속과 재정의를 전제조건으로 하여 상위 요소가 다양한 하위 요소를 통합하여 사용하는 기술이다.