객체 지향 프로그래밍(Object-Oriented Programming, ORM)이란, 좀 더 나은 프로그램을 만들기 위한 프로그래밍 패러다임으로 로직을 상태(state)와 행위(behave)으로 이루어진 객체(Object)로 만드는 것이다.
조금 비유섞인 설명으로 풀어보자면,
어떠한 큰 카테고리의 부모 클래스(객체, 모델)를 기준으로 그로 인해 파생될 수 있는 하위 클래스를 정의하고 부모 객체로 부터 기본적인 스펙(상태), 기능(행위)을 상속 받아 자식에서 그대로 사용하거나 조금 더 확장된 기능으로 사용할 수가 있다.
예를 들어 "자동차"라는 큰 카테고리의 객체에서 "제조사" 또는 "차량 모델"로 뻗어 나갈 수 있다. 자동차에는 기본적인 상태(차량 번호, 현재 속도, 현재 주유량) 등이 있을 수 있고, 행위(달리다, 멈추다, 주유를 하다) 등이 존재할 것이다. 그리고 하위 객체에서는 상태(제조사, 모델명, CC, 최고속도), 행위(속도 제한, 옵션 기능) 등이 있을 것이다. 그렇다면 각각의 차량모델에서 일일이 기본적인 상태나 행위를 선언하게 되면 중복적인 코드들이 늘어날 것이고 효율적이지 못한 코드가 될 것이다.
이러한 "중복"을 최소한으로 줄이기 위해 클래스(객체 지향 프로그래밍)를 사용한다. 조금 더 명확하게 표현하면 재사용성이 좋은 모듈을 만들기 위함이다. 재사용성이 좋은 모듈이라면 유지보수성도 좋아질 뿐만 아니라 비슷한 유형의 프로젝트가 있다면 활용할 수가 있다.
프로그래밍 언어 중 Low Level 언어라고 불려지는 C언어 같은 경우는 절차 지향 프로그래밍(Procedural-Oriented Programming, POP)이다.
물 흐르듯 순차적인 처리로 진행 되어 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법이다. 절차 지향 프로그래밍의 장점은 컴퓨터와 처리 방식이 비슷하여 (객체 지향 프로그램 보다)빠르다고 한다.
하지만 문법이 굉장히 어렵고 절차적으로 진행 되기에 코드의 순서가 조금이라도 바뀌면 실행이 되지 않는다. 그리고 유지보수, 디버깅이 어렵다.
절차 지향 프로그래밍의 이러한 단점들을 보완하기 위해 객체 지향 프로그래밍이 생겨났다고 한다. C언어 보다 자바의 실행 속도가 느리다고는 하지만 요즘 같은 성능 좋은 컴퓨터를 사용한다면 일반적으로는 느낄 수가 없을 정도로 자바도 충분히 빠른 언어이다.