객체지향 이전에는 C언어처럼 실행하고자 하는 순서대로 명령어를 입력해서 실행되는 "절차 지향"이 주를 이루었다. => 이와 같은 코딩하는 언어들을 "절차지향 언어"라고 지칭한다.
이 당시에는 프로그램의 단위가 크지 않았고, 대체적으로 간단한 로직을 순차적으로 처리하여 결과를 얻는데 그쳤지만, 컴퓨터의 발전과 이로 인한 프로그램의 복잡도가 증가하며 이에 들어가는 유지보수, 개발기간등 다양한 방면에서 비효율이 발생하였다.
위의 비효울적인 부분을 개선하고자 "효과적인 개발방식"을 채택하게 되었고 객체지향의 특성인 추상화, 상속, 은닉, 재사용, 인터페이스등 여러 곳에서 객체지향으로 개발을 시작하였다.
객체지향이란 현실에 존재하는 사물을 있는 그대로 모델링하여, 이들의 행위와 속성을 정의하고 절차적이 아닌 객체가 중심이 되어 실제 사물이 동작하는 방식으로 설계하기 시작하였다. => 사물은 객체라고 부르며, 해당 사물이 하는 행위는 메소드 해당 사물이 가지고 있는 속성을 변수라고 정의한다.
객체 설계
자동차 =>속성: 자동차 이름, 자동차 번호, 등록년월, 모델명.. =>행위: 주행거리, 연비계산, 번호교체, 등록증갱신
객체의 3가지 요소(객체의 상태, 객체의 책임, 객체의 유일성) - 상태 유지: 객체는 상태 정보를 저장하고, 유지되어져야하며 이러한 속성은 변수로 정의되어져야한다. 이러한 속성값이 바뀜으로 인해 객체의 상태가 변경될 수 있어야한다. - 기능 제공: 메소드를 통해 기능을 제공해야하고, 외부로 부터 직접 속성에 접근하여 변경하는 것이 아닌 객체가 제공하는 메서드로 기능이 제공되어져야 한다. - 고유 식별자 제공: 각각의 객체는 고유한 식별자를 가져야 한다.
물리 객체와 개념 객체
물리 객체 => 물리적 객체는 실제로 사물이 존재하며, 이를 클래스로 정의한 객체를 의미한다. => Ex) 자동차 렌탈 시스템: 자동차, 고객, 직원, 사업장...
개념 객체 => 웹 시스템에서 Service에 해당되며, Business logic을 처리하는 부분을 의미한다. => Business logic에서는 여러 객체를 서로 상호작용하도록 하며 객체가 제공하는 오퍼레이션 메소드를 통하여 객체의 속성을 변경 시킨다.