"안녕하세요, 아미고! 드디어 정말 흥미로운 것을 발견했습니다. 오늘은 다중 상속 에 대해 말씀드리겠습니다 . 다중 상속은 참으로 매우 매력적이고 강력한 도구입니다. 그리고 몇 가지 문제가 없다면 Java는 클래스의 다중 상속을 지원합니다. 하지만 지원하지 않으므로 인터페이스의 다중 상속 에 만족해야 합니다 . 이 또한 매우 훌륭합니다."
컴퓨터 게임을 작성하고 있다고 상상해보십시오. 그리고 그 캐릭터(객체)는 매우 복잡한 방식으로 행동해야 합니다. 지도를 돌아다니고, 아이템을 수집하고, 퀘스트를 수행하고, 다른 캐릭터와 소통하고, 누군가를 죽이고, 다른 누군가를 구해야 합니다. 모든 개체를 20개의 범주로 나눌 수 있다고 가정해 보겠습니다. 즉, 운이 좋다면 개체를 정의하는 데 20개의 클래스만 사용할 수 있습니다. 그러나 여기에 문제가 있습니다. 이러한 개체에는 얼마나 많은 고유한 상호 작용 형식이 있습니까? 각 유형의 개체는 20개의 다른 유형의 개체와 고유한 상호 작용을 할 수 있습니다(동일한 유형의 개체와의 상호 작용도 포함됨). 즉, 20 x 20 = 400 상호 작용에 대한 코드를 작성해야 합니다! 고유 개체 유형의 수가 20개가 아니라 100개라면 상호 작용의 수는 10,000개가 될 수 있습니다!
"와우! 이제야 프로그래밍이 왜 그렇게 어려운 일인지 이해가 가네요."
"간단합니다. 많은 추상화 덕분입니다. 인터페이스의 다중 상속 덕분입니다."
개체 자체가 아니라 역할 및/또는 능력이 상호 작용하는 경우 개체 상호 작용을 단순화할 수 있습니다. 그리고 우리가 이미 알고 있듯이 클래스가 일부 인터페이스를 구현할 때 클래스에 능력을 쉽게 추가할 수 있습니다.
대규모 프로그램을 작성할 때 개발자는 일반적으로 맨 처음부터 다음을 수행합니다.
1) 모든 능력/역할을 식별합니다.
2) 이러한 역할 간의 상호 작용을 정의합니다.
3) 그런 다음 모든 클래스에 역할을 할당하기만 하면 됩니다.
"예를 들어?"
"물론이죠. 만화 «톰과 제리»의 역할을 봅시다."
자바 코드 | 설명 |
---|---|
|
— 역할/이동 능력. |
|
— 먹을 수 있는 역할/능력. |
|
— 누군가를 먹는 역할/능력. |
|
Tom은 세 가지 역할을 하는 고양이입니다. 1) 움직일 수 있습니다. 2) 누군가를 먹을 수 있습니다 . 3) 누군가(개)에게 잡아먹힐 수 있습니다. |
|
Jerry는 두 가지 역할을 하는 쥐입니다. 1) 움직일 수 있습니다. 2) 누군가에게 잡아먹힐 수 있습니다. |
|
킬러는 두 가지 역할을 하는 개입니다. 1) 움직일 수 있습니다. 2) 사람을 먹을 수 있습니다. |
이 세 가지 역할(인터페이스)만 알면 프로그램을 작성하고 이러한 역할 간의 올바른 상호 작용을 설명할 수 있습니다. 예를 들어, 객체는 "당신이 먹을 수 있는 것"을 쫓고 "당신을 먹을 수 있는 것"으로부터 도망칠 것입니다. 그리고 이 모든 것은 특정 대상에 대해 알지 못한 채 이루어집니다. 프로그램에 더 많은 개체(클래스)를 추가하고 이러한 역할을 유지하면 개체의 동작을 제어하면서 여전히 아름답게 작동합니다.
GO TO FULL VERSION