AndreaSmalltalkLecture:QnA 01

From 흡혈양파의 인터넷工房
Jump to navigation Jump to search
질문과 답변-1

질문과 답변-1

안녕하십니까?

정훈님께서 객체지향 언어에 대해서 질문을 하셨습니다. 매우 포괄적인 질문이네요. 질문을 요약해 보면, 객체지향 프로그래밍 언어에는 어떤 것이 있으며, 그리고 그들 중 하나라도 좋으니 정리를 해 달라는 말씀이신 것 같습니다. 맞습니까?


우선 객체지향 언어가 무엇인지부터 생각해 봅시다. 객체지향 프로그래밍 언어란, 객체(object)를 중심에 두고 프로그래밍을 할 수 있는 언어, 즉 컴퓨터 프로그래밍에 객체지향의 개념을 사용할 수 있는 언어를 가리킵니다.


우리 옆 방(9번)에 '객체지향 개발 방법론'에 대한 글이 있습니다. 결국 객체지향 프로그래밍 언어 또한 그 바탕이 '객체지향'이라는 개념이므로, 객체지향이라는 개념을 확실히 알아두는 것이 중요하다고 생각합니다.


간단히 말씀드리면,

  • 세상에 있는 모든 것은 객체이다.
  • 따라서 어떤 문제가 있으면 그 문제를 풀기 위한 객체를 풀어낼수 있다.
  • 객체는 나름대로의 갈래(class)에 속한다.
  • 객체는 자기가 어떤 일을 해야 할 지를 알고 있다.
  • 객체에게 어떤 일을 시키기 위해서는 객체가 알고 있는 지시(message)를 내려주어야 한다. 그러면 객체는 자신이 알고 있는 길수(method)에 따라서 행동을 취하고 결과를 얻어낸다.
  • 또한 객체는 나름으로의 특성(attribute, property)을 가지고 있다.
  • 객체는 자기가 무슨 일을 할지를 알고 있기 때문에, 서로 다른 객체라 하더라도, 똑같은 메세지를 줄 수 있다. 이를 다형성 (polymorphism)이라 한다. 학교에서 종을 쳐서 여러 학생들에게 지시를 보내면, 어떤 학생은 집에 가고, 어떤 학생은 다른 교실로 간다. 이는 '종을 친다'는 하나의 지시에 따라 여러 객체가 다르게 반응할 수 있음을 의미한다.
  • 이미 있는 객체에 다른 기능을 더하고 싶을 때에는, 원래의 객체를 손 델 필요 없이, 그 객체의 모든 것을 물려받아서 새로운 갈래를 지을 수 있다. 이를 상속성(inheritance)라 부른다.


뭐 이런 것들이 객체지향의 가장 기본적인 개념이라고 할 수 있습니다. 이런 개념 위에 'encapsulation'(캡슐화? 음. 아직 이 말에 대해서 마땅한 우리 낱말을 찾아내지 못했습니다만...)라던가 객체의 독립성이나 재사용성 등이 생기게 됩니다.


위에서 말한 객체지향의 특성을 지원하는 프로그래밍 언어는 모두 객체지향 프로그래밍 언어라고 할 수 있습니다.


객체지향 프로그래밍 언어에는 '순수 객체지향 프로그래밍 언어'가 있고, '확장 객체지향 프로그래밍 언어'가 있습니다. 전자는 객체지향적으로만 프로그래밍을 설계하고 바라보는 것으로써, Smalltalk나 Eiffel, Java 등이 있으며, 후자는 기존 언어에 객체지향 개념을 더한 언어로써, C++, Object Pascal 등이 있습니다.


이들 언어들은 각기 나름대로의 특징이 있지만, 앞에서 살펴본 객체지향적인 특징들을 나타내기 위해 여러 가지 서로 다른 문법이나 의미를 사용합니 다. 따라서 C++ 에서 객체지향의 기본 개념을 파악하면 Smalltalk 등과 같은 다른 객체지향 언어를 접하기가 매우 쉽다고 할 수 있습니다.


이 게시판에서 보고계시듯이, 저는 객체지향 넝어의 조상이자 중심인 Smalltalk 언어에 대해서 강좌를 올리고 있습니다. 이 글의 목적은 단순히 Smalltalk 를 공부하는 데 있는 것이 아니라, 이 언어를 통해서 좀 더 쉽게 객체지향에 대한 개념을 습득하는데 있습니다. Smalltalk는 다른 언어들에 비해서 매우 간단한 문법을 가지고 있기 문에, 프로그램의 문법을 공부하기 위해 시간을 많이 투자할 필요가 없습니다. 오히려 Smalltalk는 순수 객체지향 언어이기 때문에, Smalltalk의 문법적인 사항을 공부하면 저절로 객체지향 개념이 잡히게 되어 있습니다. 그러므로 제 글을 읽어보시면 미약하나마 도움이 되실 것입니다. 글은 앞으로도 계속 올라갈 예정입니다.


그럼 도움이 되시기를 바랍니다.


Notes