AndreaSmalltalkLecture:QnA 04
- 질문과 답변-4
- :객체지향 언어의 자격...?
객체지향 언어의 자격...?
안녕하세요?
음, 객체지향 언어라면, 일단 객체지향 패러다임을 제대로 지원해야 할 줄로 압니다. 사람들마다 생각하는 것이 조금씩 다르겠지만, 일단 제가 공부했었고, 또한 느낀 것을 바탕으로 아래의 조건들이 만족되어야 한다고 생각합니다.
- 포장성(encapsulation)
- 다형성(polymorphism)
- 상속성(inheritance)
졸면서 쓰는 것이라서 철자가 제대로 맞는지...
우선 포장성부터. 이것은 하나의 객체에 그 상태를 나타내는 자료와 객체의 행동을 규정하는 길수(method)를 함께 포장해 넣을 수 있느냐 하는 문제입니다. 보통은 객체의 모형인 갈래(class)를 만들어 놓고, 이 갈래에 길수와 성분(member)들을 규정해서 이 규정 대로 객체를 생성해 냅니다. 이때 객체의 외부에서 함부로 객체의 성분을 바꿀 수 없도록 하는 것이 포장성인데, 대부분의 언어에서는 가무림(private), 터놓음(public), 보호됨(protected) 등의 접근권을 제한하는 방식으로 포장성을 구현합니다. 물론 다 그런건 아니고 Smalltalk와 같은 경우는 모든 성분들은 가무려지고, 반대로 모든 길수들은 드러내 놓는 방식을 취하기도 합니다. 어쨌건 포장성이란 객체를 조작할 때 객체를 만든 사람이 마련해 놓은 규칙(이를 interface 또는 protocol이라 하지요)을 통해서만 접근할 수 있다는 것이 중요합니다. TV의 속을 마음대로 만져서 조작하느 게 아니라 지정된 스위치를 눌러서 조작하는거랑 같다고 보면 됩니다.
다음은 다형성. 이는 어떤 지시(message)를 서로 다른 객체에게 보냈을 때, 그 지시를 받은 객체(receiver)의 갈래에 따라 서로 다르게 반응하는 성질을 말합니다. 동적 결합(dynamic binding), 길수의 중복정의(overloading), 다중 뽑아내기(dispatching) 등이 다형성을 구현하기 위한 몇 가지의 방법으로 사용됩니다.
상속성. 이는 어떤 갈래의 특성을 그대로 물려받아서 새로운 갈래를 지을 수 있다는 말입니다. 이를태면 "사람"이라고하는 갈래에 들어 있는 성분과 길수를 그대로 물려받아서 새롭게 "학생", "교수" 등의 갈래를 만들어 내는 것입니다.
아마 JavaScript 는 포장성과 상속성을 지원하지 않는다고 알고있습니다. 이를태면 사용자가 마음대로 갈래를 지어서 객체를 만들어내지 못한다고 알고 있습니다. 따라서 상속성도 지원받지 못한다고 하고요. Visual Basic 을 객체지향 언어라고 보기 어려운 것은 바탕글(source) 수준의 상속성을 지원하지 않고 있기 때문이라고 합니다. 뭐, 이에 대해 이의를 제기사힐 분이 있으실 테지만요...
제가 혹 잘못 알고 있는 것이 있다면 바로잡아 주십시오. 그럼.