저번 글에 이어서 클래스간의 관계에 대해서 단일상속과 object클래스라는 것에 대해 알아봅시다.
단일상속
먼저 저번 글에서 하나의 조상이 여러개의 자손을 가지는 상속은 가능하다고 이야기했었습니다.
그렇다면 반대로 하나의 자손이 여러개의 조상으로부터 상속받는 것은 어떨까요?
아쉽게도 자바에서는 이렇게 둘 이상의 조상을 가지는 상속(다중상속)을 지원하지 않습니다.
다중상속을 허용하면 여러 클래스로부터 상속을 받을 수 있기 때문에 복합적인 기능을 가진 클래스를 쉽게 작성할 순 있겠지만,
클래스간의 관계가 매우 복잡해지고, 서로 다른 조상간에 같은 이름을 가진 멤버를 구별할 수 있는 방법이 없다는 단점이 있습니다.
예를 들어 Parents1, 2클래스에 모두 method라는 메서드가 있다고 가정하고 이 두 클래스를 상속받을 수 있다고 생각해봅시다.
그럼 이때 자손인 Child는 두 클래스의 method중 어떤 메서드를 상속받아야 되는걸까요?
또한 둘 다 상속받는다면 어떻게 그 둘을 구분해야 하는지... 이런 문제들의 해결이 쉽지 않다고 합니다.
때문에 자바에서는 다중상속의 장점을 포기하고 단일상속만을 지원하고 있습니다.
단일상속은 다중상속에 비해 불편한 점도 있겠지만, 클래스 간의 관계가 보다 명확해지고, 신뢰성 있는 코드를 작성할 수 있도록 해줍니다.
Object클래스
다음으론 Object클래스라는 것에 대해 알아보도록 합시다.
이 Object클래스는 자바의 모든 클래스간 상속관계에서 가장 상위에 위치하고 있는 조상클래스입니다.
다른 클래스로부터 상속받지 않는 모든 클래스는 자동적으로 Object클래스로부터 상속을 받도록 되어있습니다.
예를 들어 여러분이 상속을 받지 않는 Tv클래스를 새로 만들었을 때,
이 클래스의 뒤에는 자동적으로 extends Object라는 코드가 숨겨져 있는 것입니다.
때문에 이 Tv클래스를 다른 클래스에서 상속받아도 결국 Tv의 조상이 Object이기 때문에 모든 클래스의 최상위 조상클래스인것입니다.
그러니 당연하게도 모든 클래스는 Object클래스 내에 정의되어 있는 변수와 메서드를 사용할 수 있는데,
Object클래스에는 toString()이나 equals()와 같은 모든 인스턴스가 가져야 할 기본적인 11개의 메서드가 정의되어 있습니다.
따라서 여러분은 이 메서드들을 따로 정의하지 않아도 모든 클래스에서 사용할 수가 있습니다.
이 11개의 메서드들에 대해서는 추후에 좀 더 자세히 알아보도록 합시다.
이번 글은 여기까지 마치고 다음에는 오버라이딩에 대해 알아보도록 하겠습니다.
감사합니다.
'프로그래밍 언어 > 자바' 카테고리의 다른 글
자바 17. 상속, 포함관계 (0) | 2020.09.01 |
---|---|
자바 16. 변수의 초기화 (0) | 2020.08.31 |
자바 15. 생성자(Constructor) (0) | 2020.08.28 |
자바 14. 메서드 오버로딩 (0) | 2020.08.27 |
자바 13. 변수의 종류, 메서드 (0) | 2020.08.26 |