본문내용
1. 객체지향 프로그래밍의 개념과 이해
1.1. 객체지향의 기원
객체(object)의 개념이 처음 등장하는 것은 60년대 중반에 소개된 Simula라고 하는 시뮬레이션 언어를 통해서이다. 그 이전에도 객체라는 용어는 인공지능 등 몇몇 분야에서 가끔 나타나기도 하였지만 "캡슐화(encapsulation)", "다형성(polymorphism)" 등 객체지향의 개념이 비로서 소개되었다. 객체지향이란 용어가 중요하게 인식되기 시작한 것은 70년대 초반 XEROX사의 PARC(Palo Alto Research Center)에서 "Dynabook" 시스템을 개발하면서 소프트웨어로 Smalltalk을 만들었고, 여기에는 현재의 객체지향 개념의 상당수가 포함되어 있다. 80년대 중반에 들어서는 객체지향 프로그래밍이 상당히 활발히 확산되었고 C++, Objective C, Eiffel, Ada95 등 수 많은 객체지향 언어들이 연이어 탄생하게 된다.
1.2. 객체지향 등장의 배경
객체지향의 등장 배경은 그 전부터 존재해 오던 개발 방식에 문제가 있었고, 객체지향 방식이 이를 해결할 수 있다는 실마리가 보였기 때문이다.
프로그래밍과 분석/설계를 통틀어 소프트웨어의 개발 방식은 구조적이지 못한 방식에서 구조적인 방식으로, 구조적인 방식은 다시 프로세스를 우선적 분석하는 방식에서 데이터를 우선적으로 분석하는 방식으로 변천해 왔다. 70년대 이전 구조적이지 못한 개발 방식에서는 무계획적으로 하위 프로그램들을 개발하여 가면서 최종 시스템을 맞추어나가는 상향식(bottom-up)이었다. 이에 따라 프로그램들간의 연결이 어렵게 되고 모듈화가 되지 않으며 중복 코딩으로 조잡한 결과가 나올 수밖에 없었다.
구조적 개발 방식에서는 모듈화에 의한 코딩과 하향식(top-down)으로 SDLC(Software Development Life Cycle)의 전개를 따름으로써 계획적이 되고 분할과 정복(devide and conquer)의 원칙이 성립되었다. 즉, 소프트웨어를 모듈로 분할한 다음 공통 모듈과 모듈간 인터페이스를 계획하여 전체 시스템을 통합할 수 있게 된 것이다. 이러한 구조적인 방식은 구조적 분석과 설계(structured analysis & design)로 상징되는 구조적 기법(structured technique)과 정보공학(information engineering)으로 발전하였다.
하지만 데이터와 프로세스의 분리는 인간이 사고하는 방식과는 차이가 있다. 인간은 사물과 그 사물의 행위를 묶어서 생각하지 않고 따로 떼어 개별적으로 생각하는데, 데이터와 프로세스가 분리된 기술적인 산출물은 비전문가가 보아서 쉽게 이해하기 힘들며 개발자와 사용자간에 의사소통에도 어려움이 발생한다.
객체지향 기법에서는 요구명세서에 존재하는 사실을 그대로 객체로 찾아 모델링을 한다. 이는 곧바로 설계와 구현으로 이어지는데, 데이터와 프로세스가 분리되지 않으므로 이들 사이의 연결고리도 필요 없고, 단지 무엇이 필요하면 다른 객체에 메시지만 전달하면 된다. 이처럼 객체지향 기법의 등장은 기존 개발 방식의 문제를 해결할 수 있는 방법이 되었다.
1.3. 객체지향의 요소
1.3.1. 객체
객체(object)는 보고 만질 수 있는 것, 지성적으로 이해할 수 있는 것, 생각이나 행동이 추구하는 바를 말한다. 또한 문제영역에서 잘 정의된 역할을 갖고 있는 각각에 대해서 구별할 수 있는 품목(item), 단위(unit), 개체(entity)라고 정의되기도 한다. 즉, 객체는 학생, 교실, 책 같은 생각할 수 있는 모든 사물이나 공부, 수학 같은 개념상으로 존재하는 것 등 모든 것이 될 수 있다. 문제영역에 속한 사물 중에 관리의 필요성이 있거나 중요한 개념이라면 더 좋은 객체가 될 수 있다. 시스템의 관점에서 본다면 어떤 상태(state)를 나타내는 데이터의 구조와 동작을 수행하는 연산(operation)으로 이루어진 프로그램의 한 요소이다. 여기서의 연산을 객체지향에선 메소드(method)라고 한다. 이렇게 객체의 상태는 데이터에 의해 결정되고 동작은 메소드에 의해 결정된다.""
1.3.2. 메시지
메시지(message)는 객체지향 프로그래밍의 핵심 요소 중 하나이다. 메시지는 객체 간의 상호작용을 나타내는 개념으로, 객체가 다른 객체에게 특정 작업을 요청할 때 사용된다. 즉, 메시지는 객체지향 프로그래밍에서 객체 간의 의사소통 수단이라고 할 수 있다.
메시지는 세 가지 요소로 구성된다. 먼저 메시지를 받는 수신자 객체(receiver)의 이름, 그리고 수신자가 수행해야 할 메소드(method)의 이름, 마지막으로 메소드 수행 시 전달되는 인자(argument)가 그것이다. 이러한 메시지의 구조는 객체지향 프로그래밍 언어에서 일반적으로 사용되는 함수 호출과 유사하다.
예를 들어, Java 언어에서 "myCustomer.addToOrder(itemNumber, price, quantity);" 와 같은 문장은 메시지의 구조를 잘 보여준다. 여기서 "myCustomer"가 수신자 객체, "addToOrder...