객체지향 이야기 - 전병선
Posted 2007. 6. 6. 12:26, Filed under: Study/Computer Science지난 주부터 빌려보고 있는 책.
1~9장 까지는 객체지향의 개념과 각 언어별 구현, 특징이 문법적인 설명보다는 개념 설명에 중점을 두고 쓰여져 있음.
특정 프로시저(함수) 단위로 프로그램을 나누어서 작성하는 방식이 아니라
[연산 + 데이터] 를 하나의 객체 단위로 보고, 이러한 객체 프로그램을 작성하는 것.
프로그램의 진행은 객체들간의 데이터와 행위(behavior)의 통신으로 이루어짐.
객체들 사이의 데이터 처리의 흐름을 분석하고 설계하는 것이 그만큼 중요하다.
언어의 문법적인 특징보다는 객체지향적 사고 방식으로 프로그램을 작성하는 것이 포인트!
구조적 방법은 (프로시저 단위로) Divide and Conquer 방식을 목표로 소프트웨어 시스템을 세부적인 것으로 나누어 작성하므로 전체를 잘못 이해하면 세부적인 것도 잘못 이해되어 소프트웨어 전체가 잘못된 구조를 갖기 쉽다. 그러나 처음부터 전체를 제대로 이해하는 경우는 매우 드물기 때문에 전체에서 세부적인 것까지 제대로 분석되기 설계되기 전까지는 그 다음 과정을 진행하기 어렵다.
객체지향적 방법은 하나의 소프트웨어 시스템을 여러개의 객체로 구성된 것으로 본다. 각 객체는 독립적으로 고유한 기능과 서비스를 제공하며. 전체 소프트웨어 시스템을 구성하는 하나의 논리적인 구성요소가 된다. 따라서 해당 객체의 기능을 독립적으로 향상 시킬 수도 있고 다른 소프트웨어 시스템에도 재사용할 수 있으며, 또 사용자의 요구사항이 변경된 경우에도 유연하게 대응할 수 있다는 이점이 있다.
캡슐화 : 내부 데이터 구조나 구햔 방법을 감추고 인터페이스만을 공개.
필요에 따라 내부 데이터 구조나 구현 방법을 자유롭게 변경할 수 있음.
모듈성 : 크고 복잡한 것을 좀 더 작고 관리하기 쉬운 조각으로 나누어 이들 조각을 독립적으로 개발할 수 있는 특성
상속성 : 객체들 사이의 계층 관계에 따라 상속을 통하여 재사용성을 높이고 쉽게 구현할 수 있음
다형성 : 상속성을 통해서 구현 가능한, 동일한 메세지에 대해서 객체에 따라 서로 다른 연산을 수행하는 특성.
이런 것들에 대해서 대표적인 객체지향 언어에서 어떤 식으로 구현되는 지를 설명.
또한 C++, C#, JAVA,VB.NET 등 특정 언어에서 객체지향을 구현하기 위한 여러가지 기능을 제공하고 있는데 단순히 문법에 대한 이해보다는 이런 기능을 어떻게 활용하여 객체지향이라는 패러다임을 구현하는 지가 중요하다는 것,
어떤 기능이 있고 없고 어떤 언어가 더 우월한지, 더 객체지향적인지 판단하는 것은 의미가 없고, 이러한 기능들이 오버헤드로 작용할 수도 있기 때문에 필요한 때에 적절히 사용하는 판단력과 지혜가 필요하다는 것을 강조하고 있다.
객체지향 언어라는 것은 객체지향 개념을 구현할 수 있는 언어.
언어 자체도 중요하지만 객체지향 개념을 잘 적용하여 설계한다는 것에 뽀인트!
너무 자세한 설명 탓에 약간 지루한 감이 있지만 재밌다.