객체 지향 프로그래밍에서 말하는 객체는 데이터와 기능을 담고 있다. 초기 프로그래밍 방식인 절차적 프로그래밍에서는 명령어의 절차가 중요했고 데이터에는 관심이 없다. 이런 방식은 너무 복잡해서 다른 사람이 작성한 코드를 볼 때 이해하기 어렵다. 객체 지향 프로그래밍이 나오면서 반복되는 명령문 또는 관련 있는 정보와 데이터들을 같은 곳에 묶을 수 있게 되었다. 그러면서 사람이 코드 이해하는데 더 쉬워졌고 묶어놓은 것들을 다른 프로그램에 다시 사용할 수 있게 되었다.
추상화
추상화는 복잡성을 낮추는 작업이다. 대상의 내부에 어떤 일이 일어나는지 몰라도 그 대상을 겉으로 보기에 이해하기 쉽고 활용하기 쉽게 만들어주는 작업이 추상화다.
캡슐화
데이터와 기능을 하나로 묶어주는 작업이다. 구체적인 내부 데이터와 작동방식을 숨겨주는 역할을 한다.
상속
상속은 자식 클래스가 부모 클래스의 특성을 그대로 물려받는 것이다. 예를 들어 공이라는 부모 클래스는 둥글다는 특성이 있다. 여기에 축구공이라는 자식 클래스가 부모 클래스의 특성을 물려 받은 다음 바람을 넣고 뺄 수 있다는 기능을 추가 할 수 있다.
다형성
다른 객체들이 같은 메소드를 쓰더라도 각자의 상황에 맞게 해석해서 동작하는 것을 다형성이라고 한다.