[강좌 : 객체지향 - 1] 객체지향에 대해
2009.07.28 15:04
김성용(topmentor)
http://cafe.naver.com/gisdev/450
I. 객체 지향의 개요
1. 객체지향에 대해
가) 모델링(Modeling)
모델링이란 모델을 만드는 일입니다. 너무 뻔한 답인가요? 한마디로 모델링은 현실세계에 존재하는 문제나 현상을 특정한
관점에서 해석하여 어떤 결과물을 설계하거나 구현 하는 것을 의미합니다. 객체지향을 두고 갑자기 왠 모델링이야기인가
싶겠지만 객체지향은 소프트웨어를 모델링하는 한 방법입니다.
따라서 모델링을 이해하는 것은 우리가 객체지향을 왜 선택하고 있는지에 대한 답을 알 수 있는 것입니다.
모델링의 대상은 현실세계에서 우리가 느낄 수 있는 것이라면 무엇이든 해당합니다. 단, 구현하려는 대상이어야 겠지요.
모델링은 접근관점과 목적에 따라 다른 결과를 보여 주는 데 예를 들면 시나리오 작가가 은행을 모델링한다면 어떻게
접근할 까요? 아마 드라마의 배경이 되는 은행을 구상할 것입니다. 경비업체 입장에서는 은행을 어떻게 바라 볼 까요?
그들에게 있어서 은행은 외부의 침입으로 부터 방어해야 할 하나의 대상이 될 것입니다. 구현하려는 대상은 같지만 바라보는
시점과 목적에 따라 그 관심과 결과물이 달라지는 것입니다. 따라서 모델링의 산물인 모델도 다르겠죠.
전산쟁이 관점에서 모델링은 무엇일까요? 소프트웨어나 시스템으로 구현하는 대상으로 현실을 바라보겠죠. 위의 은행의 예를
전산쟁이에게 적용해 본다면 그가 DB 설계자라고 가정할 때 그 사람이 만들어내는 모델은 은행에서 일어나는 모든 데이터에
대한 스키마일 것입니다. 네트워크 설계자는 은행에서 사용하는 모든 전산망에 대한 구성을 모델로 내놓을 것이고, 프로그래
머는 은행 업무처리 프로그램을 결과물로 만들 것입니다.
이제 다시 프로그래밍 입장으로 돌아와 보죠. 프로그래밍적인 관점에서 모델링은 현실세계의 요구를 충족할 프로그램을
어떤 구조로 만들 것인지 결정하고 그것에 맞는 설계 방법론을 적용하는 것입니다.
소프트웨어 모델링에는 절차지향 방식과 객체지향 방식이 대표적입니다. 더 많은 패러다임들이 있지만 이 두 가지가
가장 많이 쓰여온 방식입니다.
나) 절차지향과 객체 지향
절차지향적 모델링과 객체지향적 모델링을 비교해 보도록 하겠습니다.
우선 절차지향적 모델링은 프로그램을 기능중심으로 바라보는 방식입니다. 따라서 함수가 모듈의 단위가 됩니다.
절차지향 모델링을 할 때에는 '무엇을 어떤 절차로 할 것인 가?'가 핵심 질문이 됩니다. 즉, 프로그램의 어떤 기능을
어떤 순서로 처리 하는 가에 초점을 두어 설계해 나갑니다. 따라서 이 관점에서 설계된 프로그램은 자료구조와
알고리즘으로 구분되는 특성을 갖습니다.
. 절차지향 프로그램 = 자료구조 + 알고리즘
반면 객체지향 모델링은 기능이 아닌 객체를 중심으로 설계를 합니다. 따라서 모듈의 단위는 클래스가 됩니다.
(모듈의 단위가 객체가 아닙니다.... ^^ 왜 그럴까요? 객체의 type정의가 바로 클래스이기 때문입니다.)
객체지향 모델링을 할 때에는 '누가 어떤 일을 할 것인 가?'가 핵심 질문이 됩니다. 프로그램 구현에 필요한
객체를 파악하고 그 객체의 역할이 무엇인가 정의해 나가는 것이 객체지향이라고 보시면 됩니다.
따라서 객체지향 관점에서 설계된 프로그램은 객체와 객체의 연결로 되어 있습니다. 그런데 그 객체 안에
자료구조와 알고리즘이 들어있는 것이죠.
. 객체지향 프로그램 = 객체 + 객체(자료구조+ 알고리즘)
절자지향과 객체 지향 두 방식을 비교하면 아래와 같습니다.
1) 소프트웨어를 보는 관점
. 절차지향 관점 : 자료구조 + 알고리즘 = 프로그램
. 객체지향 관점 : 자료구조 + 알고리즘 = 객체, 객체+객체 = 프로그램
2) 절차지향과 객체지향 설계방식
- 절차지향 : 모델링할 대상의 기능을 추출하고 순서적으로 나열
- 객체 지향 : 객체들을 도출하고 각 객체가 해야할 역할을 정의하고 객체간에 통신을
통해 수행을 전개해 나간다.
다) 객체지향
객체지향에 대해 좀 더 자세히 살펴보죠. 객체지향 모델링은 인간이 사고하는 방식과 비슷한 방식으로
모델링 한다고 하여 natural modeling이라고도 불립니다. 우리가 어떤 일을 수행할 때를 생각해보면
필요한 사람들을 모으고 각 사람들에게 임무를 부여하는 방식을 취합니다. 객체지향 모델링도
비슷합니다. 프로그램 수행에 필요한 객체들을 생성하고 이들간에 데이터를 주고 받으면서 프로그램이
실행되도록 되어있습니다.
여기에서 한가지 느껴지는 것이 있을 겁니다. 절차지향적인 방식은 컴퓨터 작동구조를 염두에 둔 설계이
므로 기능중심으로 설계를 할 수 밖에 없었습니다. 그런데 인간이 사고하는 방식과 프로그램 설계방식이
비슷하다면 어떻게 될 까요? 모델링을 쉽게 할 수 있다는 생각을 해 볼 수 있습니다. 이상적인 모델링인
셈입니다.
요즘처럼 고객의 편의를 제공하거나 문제를 해결하기 위한 프로그램을 만들 때에는 요구사항을 분석할 때
객체지향 방식이 훨씬 유리할 것이란 결론을 얻을 수 있습니다.
객체지향이 처음 나올 당시 큰 기대를 걸었던 것은 바로 인간이 사고하는 방식으로 설계 함으로 해서 설계에
들어가는 시간을 줄이고 더 탄탄한 구조설계를 할 수 있을 것으로 보았기 때문입니다. 이렇게 해서 소프트웨어의
위기를 넘기려고 했던 것입니다.
다음 강좌는 프로그래밍 입장에서의 객체지향을 살펴보겠습니다.
'기반지식 > 객체지향 개념' 카테고리의 다른 글
[강좌 : 객체지향 - 5] 캡슐화 (0) | 2009.11.10 |
---|---|
[강좌 : 객체지향 - 4] 추상화 (0) | 2009.11.10 |
[강좌 : 객체지향 - 3] 객체지향 프로그래밍의 4대 특징 (0) | 2009.11.10 |
[강좌 : 객체지향 - 2] 객체지향 프로그래밍이란? (0) | 2009.11.10 |
객체지향언어 - C# (0) | 2009.11.10 |