plus(int, int)는 plus함수가 int 타입의 매개변수를 2개 받는다는 뜻입니다.
그리고 그 클래스 사이에 점선 화살표는 누가 누구를 객체화한다는 뜻입니다.
즉, 위 그림(다이어그램)에서는 Main 클래스가 Operator를 객체화하는 모습을 그린 것입니다.
자, 이제 본론으로 들어가겠습니다.
Main 클래스가 사칙연산을 하려고 합니다. 이때 사칙연산과 관련된 메서드 plus, minus, multi, devide는 Operator, Operator2, Operator3, Operator4 클래스의 멤버로 존재합니다.
그럼 Main 클래스의 입장에서는 이 네 개의 메서드를 사용하기 위해 각각의 클래스를 객체화하는 작업을 해야 할 것입니다.
코드로 표현하자면 위 그림과 같습니다.
그동안의 예시보다는 많은 클래스를 객체화하기에 다소 정신없어 보이긴 하죠?
이제 상속을 활용해 보겠습니다. 여기서 실선의 삼각형은 상속을 의미합니다.
Operator3는 Operator4를 상속받습니다.
그리고 Operator3을 Operator2 가 상속받고Operator2를 Operator 가 상속받습니다.
즉 Operator는 부모, 조부모, 증조부모의 내용까지 모두 상속받은 셈이 됩니다.
조상들의 재산을 대대로 물려받으면 재산의 양이 큰 것처럼, Operator 도 물려받은 메서드가 많네요.
코드 상에서 보면 Main 은 Operator를 객체화하면, Operator 가 본래 가지고 있는 plus 메서드는 물론이고 물려받은 minus, multi, devide 메서드 도 사용 할 수 있게 됩니다.마치 Operator 가 본래 자기가 가지고 있는 것처럼 말이죠.
상속에서의 핵심인 자기 것처럼 이란 뜻은 바로 이것입니다.
상속을 사용했을 때와 사용하지 않았을 때의 코드를 비교해 보면내 것처럼 사용한다는 개념과, 이것이 왜 유용 한지에 대해 이해할 수 있을 것입니다.
상속을 사용하지 않으면 사용자 입장에서는 필요한 메서드를 가지고 있는 클래스들을 하나하나 객체화해야 하는 수고로움이 있을 것입니다.
하지만 상속을 사용하면 하나의 클래스만 객체화하여 여러 클래스의 메서드를 사용할 수 있습니다.
그래서 내가 작성한 코드 없이 상속 만을 이용해 다른 사람들에게 유용한 기능을 제공해 줄 수도 있습니다.
예를 들어 사람들이 자주 쓸 것 같은 클래스들을 한대 모아 Utils라는 클래를 만들었다고 가정해 보겠습니다.
그러면 사람들은 Utils 클래스만 객체화하여 다른 클래스들의 유용한 기능들을 사용할 수 있을 것입니다.
이런 방법을 통해 사용자들이 다름 사람들의 소스를 더욱 편리하게 사용할 수 있게 할 수 있습니다.
OOP의 기본 철학과도 잘 맞아떨어지죠?
하지만 왜 상속을 굳이 불편하게 하나씩 해야 하는지에 대해서 의문이 하나 들지 않나요?
한꺼번에 여러 개의 클래스를 상속받으면 참 편할 텐데 말이죠.
C++ 등의 일부 언어에서는 다중 상속을 허용합니다만 자바에서는 불가능합니다.
그 이유는 java의 class는 분류의 개념이기 때문에 그렇습니다.
인간이 조류이면서도 포유류 일 수 없기에 한 번에 한 분류의 하위로 들어가야만 합니다.
어때요? 상속의 특징과 사용법에 대해 알아보니 상속을 사용함으로써 어떤 점이 좋은지 이해가 되시나요?