2008. 7. 22. 20:45

2장 미션임파서블 - 객체지향을 이해하라.

구조적 방법론에서는 작은 단위로 나누어서 해결하는 '나누어서 정복한다(divide and conquer)' 모토로 운영이 된다. 하지만 객체지향 방법론에서의 문제 해결은 추상화(abstraction), 캡슐화(encapsulation), 모듈성(modularity), 계층성(hierarchy)이라는 4가지 개념으로 요약할 수 있다.
객체지향 방법론이 구조적 방법론과 배타적인 개념을 강조하는 것이 아니라 구조적 방법론의 장점을 포함하는 것이다.

추상화는 보다 중요하고 필수적인 사항을 다루려고 하는 것이며 이때 중요한 것은 무엇이 중요한지, 무엇이 덜 중요한 것인지를 직관적으로 판단할 수 있어야 한다는 것이다.
캡슐화는 말 그대로 중요하고 세부적인 구현 방법에 대한 자세한 사항을 캡슐 안에 꼭꼭 숨겨놓는 것이다.
캡슐화는 데이터 감추기(data hiding)라고도 한다.
모듈성이란 크고 복잡한 것을 좀 더 작고 관리할 수 있는 조각으로 나누어, 이들 조각을 독립적으로 개발할 수 있게 하는 것이다. 객체로 명명한다.
계층성이란 보편적인 것을 상위에 두고 특수한 것을 하위에 두는 것을 말한다. 등급이나 순서에 따라 계층적인 구조로 조각들을 배열하는 것을 말한다.

객체란 애플리케이션에서 명확한 한계와 의미를 갖는 사물이나 개념 또는 추상화로서, 특성과 행위 그리고 정체성을 하나의 단위로 포함하여 캡슐화하는 것을 말한다.
특성 : 해당 객체에 저장되어 있는 정보
행위 : 해당 객체가 행동하거나 반응하는 방법을 결정
정체성 : 해당 객체를 다른 객체와 구별 짓게 하는 식별 값
2008. 7. 21. 00:28

1장 객체지향 - 이것이 무엇에 쓰는 물건인고

객체지향 언어가 사용된 스몰토크(Smalltalk)에서는 MVC(model-view-controller) 패턴이 사용되었는데
MVC 패턴이란 데이터를 관리하는 놈(model), 데이터를 보여주는 놈(view), 프로그램의 흐름을 좌지우지하는 놈(controller)으로 구성되어 있다.
요즘 나오는 대부분의 소프트웨어 아키텍처(software architecture)들은 이러한 유형을 따르고 있다.
ex : C++, 윈도우 DNA 아키텍처, 자바 등
3계층의 구성 요소들 사이의 프로토콜 즉 통신 방법에는 여러가지가 있다.
ex : COM/DCOM/COM+, COBRA, EJB, XML 등

소프트웨어 개발방법
1. 구조적 방법 : 대표언어 C이며 하나의 프로그램이나 시스템은 잘게 쪼개진 여려 개의 세부적인 것으로 구성되어 있는 것으로 간주되는 개념이다. 피라미드 형식이나 그물과 같은 구조의 형식을 지칭한다.
구조적 언어의 단점 중 하나는 프로그래밍 언어가 프로그램의 실행 흐름 즉, 절차에 치중한다는 것이다.
하지만 프로그램에서 중요한 것은 절차만이 아니며 중요정도에서는 데이터가 더 큰 비중이 있다고 할 것이다.
그러나 절차적 프로그래밍 언어에서는 데이터와 그것을 처리하는 절차를 구분시켜 놓으므로써, 데이터를 소홀히 하는 단점이 있다.
이것의 결과로 데이터와 그 데이터를 처리하는 절차가 분리되어 있어서 코드가 복잡해 지거나 조금 더 편리해지기 위해 보다 중요한 데이터를 전역 변수로 정의하여 권한이 없는 다른 함수에서도 접근할 수 있게 하는 문제점을 노출하기도 한다.
2. 객체지향 방법의 핵심은 데이터와그 데이터를 처리하는 절차를 하나의 단위로 묶어 놓는데에 있다. 또 같은 단위에 속해있는 절차 즉, 코드를 통해서 데이터에 접근하게 함으로써 보다 중요한 데이터를 보호할 수 있게 한다.

C++이 객체지향 개념을 포함하며 본격적인 객체지향 언어로 입지를 굳혔으나, 인터넷의 특징을 손쉽게 활용할 수 있는 자바언어가 대두되게 되었다.
자바 언어에서 모든 객체는 포인터 대신에 레퍼런스(reference)를 통해 접근하게 되며, 객체의 소멸은 자바 가상 머신(Java virtual machine) 안에 있는 가비지 컬렉터(garbage collector)가 대신 처리해주므로 프로그래머는 delete 연산자를 사용하지 않아도 되게 되었다.

객체지향 방법은 하나의 소프트웨어 시스템을 여러 개의 객체로 구성된 것으로 간주한다. 각 객체는 독립적으로 고유한 기능과 서비스를 제공하며, 전체 소프트웨어 시스템을 구성하는 하나의 논리적인 구성 요소가 된다.
각 객체가 전체에 포함된 일부로서가 아니라 독립적인 것으로 간주되기 때문에 해당 객체의 기능르 독립적으로 향상시킬 수도 있고 다른 소프트웨어 시스템에도 재사용할 수 있으며, 또한 사용자의 요구 사항이 변경되는 경우에도 손쉽게 대응할 수 있다는 이점을 갖게 된다.

용어 설명
1. 애플릿(applet) : 웹 서버에서 다운로드된 후에는 웹 서버의 자원을 사용하지 않고 사용자와 상호작용하며 작업을 수행하는 자바 언어로 만든 작은 애플리케이션
2. 모델링 언어 UML(Unified Modeling Language) : 설계자와 사용자가 서로 의사 소통을 하는데 사용하는 말을 모델링 언어라 하며, 객체지향 방법론에서는 주로 UML이라는 모델링 언어를 사용한다.
UML이란 소프트웨어 시스템을 시각화하고 명세화하고 구축하고 문서를 작성하는데 사용하는 그래픽으로 표현되는 언어(a graphical language for visualizing, specifying, constructing, and documenting the artifacts of a software-intensive system) 라고 정의된다.

P.S 객체지향 이야기는 한장씩 읽어나가야 하는데 첫장을 포스팅 하기 너무 힘들었다. 왜냐고??? 좀 읽다가 졸았기 때문에... ㅋㅋ 아무튼 이 시간에 포스팅을 시작해서 좋다. ^0^