상속
- 연관된 일련의 클래스들에 대해 공통적인 규약을 정의할 수 있도록 하는 것
- extends 키워드를 사용하여 상속을 구현할 수 있다.
기본적인 특성
- 기존에 정의된 클래스에 메소드와 변수를 추가하여 새로운 클래스를 정의하는 것이 상속이다.
- 자바는 프로그램이 과도하게 복잡해지는 것을 막기 위해 단일 상속 만을 지원한다.
이는 하나의 클래스가 상속할 수 있는 클래스의 수가 최대 하나라는 것을 의미한다.
( C++의 경우 다중 상속을 지원한다. )
- 하위 클래스의 인스턴스 생성 시, 상위 클래스, 하위 클래스의 생성자 모두 호출된다.
하위 클래스에서 상위 클래스의 생성자를 명시적으로 호출하지 않으면, 디폴트 생성자가 자동으로 호출된다.
상위 클래스의 생성자를 명시적으로 호출하기 위해서는 키워드 super를 사용한다.
- 하위 클래스는 상위 클래스의 모든 특성을 물려받고 더불어 자신만의 추가적인 특성도 가지고 있다.
주의사항
- 상속으로 인해 하위클래스의 멤버가 되는 변수도 초기화 해주어야 한다.
상속을 위한 두 클래스의 관계
- 두 클래스를 상속의 관계로 맺는 것이 도움이 되는 상황이 있고 도움이 되지 않는 상황이 있다.
- IS-A 관계가 성립할 때 상속의 후보로 고려한다.
-> IS-A 관계는 ‘~은 ~이다’로 표현되는 관계이다.
예시) 노트북은 컴퓨터이다, 전기자동차는 자동차이다.
상속이 갖는 문법적 특성은 IS-A 관계의 표현에 적합하다.
따라서 상속 관계를 형성하기 위한 두 클래스는 IS-A 관계에 있어야 한다.
상속을 하는 이유
- 서로 다른 두 클래스 예를 들어 대학동창, 직장동료 라는 클래스가 존재한다고 가정하자
대학동창 : 이름, 전공, 전화번호 정보 저장 및 관리
직장동료 : 이름, 부서, 전화번호 정보 저장 및 관리
상속을 사용하지 않았을 경우, 서로 다른 두 클래스의 정보를 저장하기 위해서 배열을 사용한다고 가정한다면, 각각 별도의 배열이 필요하다. 각각의 클래스마다 저장에 필요한 변수가 다르기 때문이다.
배열이 두 개 이므로 대학동창, 직장동료 두 클래스의 작업은 과정이 둘로 나뉠 수 밖에 없다.
만약 특정 이름의 정보를 검색하는 기능을 추가한다면, 두 배열을 모두 검색해야 하는 번거로움이 있다.
이와 같이 유사한 특성이 있는 클래스에 대해 공통적인 규악을 정의하지 않는다면 유사한 특성(여기서는 이름, 전화번호가 공통)을 가지는 클래스가 새로 추가될 때마다 데이터 저장을 위한 배열이 추가되고 처리 과정이 추가되어 점점 프로그램이 복잡해질 것이다.
그러나 이름과 전화번호를 가지는 부모 클래스를 만들고 전공, 부서를 가지는 각각의 하위 클래스를 만들어서 사용한다면, 하나의 배열로 데이터를 저장하거나 처리할 수 있다. 이는 프로그램이 보다 간결해지는 것을 의미한다.
자바에서 Object라는 최상위 클래스를 모든 클래스가 직접, 간접적으로 상속하도록 한 이유도 위와 같은 맥락이다. 어떤 클래스에서라도 공통적인 기능을 사용할 수 있는 이유는 바로 이 때문이다.
[참고자료]
윤성우의 열혈 Java 프로그래밍
'Java > 기본' 카테고리의 다른 글
자바(Java) - 인터페이스 (0) | 2020.02.27 |
---|---|
자바(Java) - 인스턴스 접근 가능 멤버 결정 규칙 (0) | 2020.02.27 |
자바(Java) - 다차원 배열 (0) | 2020.02.26 |
자바(Java) StringBuilder, StringBuffer (0) | 2020.02.26 |
자바(Java) 메소드 오버로딩, 메소드 오버라이딩 (0) | 2020.02.25 |