-
[whiteship] 온라인스터디 - 6주차. 상속IT 발자취.../JAVA 2020. 12. 26. 14:41
github.com/whiteship/live-study/issues/6
목표
자바의 상속에 대해 학습하세요.
학습할 것 (필수)
- 자바 상속의 특징
- super 키워드
- 메소드 오버라이딩
- 다이나믹 메소드 디스패치 (Dynamic Method Dispatch)
- 추상 클래스
- final 키워드
- Object 클래스
상속 (inheritance)
상속의 정의와 장점
상속이란, 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것이다. 상속을 통해서 클래스를 작성하면 보다 적은 양의 코드로 새로운 클래스를 작성할 수 있고 코드를 공통적으로 관리할 수 있기 때문에 코드의 추가 및 변경이 매우 용이하다.
이러한 특징은 코드의 재사용성을 높이고 코드의 중복을 제거하여 프로그램의 생산성과 유지보수에 크게 기여한다.
자바에서 상속을 구현하는 방법은 아주 간단하다. 새로 작성하고자 하는 클래스의 이름 뒤에 상속받고자 하는 클래스의 이름을 키워드 'extends'와 함께 써 주기만 하면 된다.
예를 들어 새로 작성하려는 클래스의 이름이 Child이고 상속받고자 하는 기존 클래스의 이름이 Parent라면 다음과 같이 하면 된다.
class Child extends Parent { // ... }
이 두 클래스는 서로 상속 관계에 있다고 하며, 상속해주는 클래스를 '조상 클래스'라 하고 상속 받는 클래스를 '자손 클래스'라 한다.
조상 클래스 : 부모(parent) 클래스, 상위(super) 클래스, 기반(base) 클래스 자손 클래스 : 자손(child) 클래스, 하위(sub) 클래스, 파생된(derived) 클래스
자바 상속의 특징
자손 클래스는 조상 클래스의 모든 멤버를 상속받기 때문에, Child클래스는 Parent클래스의 멤버들을 포함한다고 할 수 있다. 클래스는 멤버들의 집합이므로 클래스 Parent와 Child의 관계를 다음과 같이 표현할 수도 있다.
만일 Parent 클래스에 age라는 정수현 변수를 멤버변수로 추가하면, 자손클래스는 조상의 멤버를 모두 상속받기 때문에, Child클래스는 자동적으로 age라는 멤버변수가 추가된 것과 같은 효과를 얻는다.
class Parent { int age; } class Child extends Parent { }
반대로 자손인 Child 클래스에 새로운 멤버로 play() 메서드를 추가해 본다.
class Parent { int age; } class Child extends Parent { void play() { System.out.println("Play~"); } }
Child 클래스에 새로운 코드가 추가되어도 조상인 Parent클래스는 아무런 영향도 받지 않는다. 여기서 알 수 있는 것처럼, 조상 클래스가 변경되면 자손 클래스는 자동적으로 영향을 받게되지만, 자손 클래스가 변경되는 것은 조상 클래스에 아무런 영향을 주지 못한다.
자손 클래스는 조상 클래스의 모든 멤버를 상속 받으므로 항상 조상 클래스보다 같거나 많은 멤버를 갖는다. 즉, 상속에 상속을 거듭할수록 상속받는 클래스의 멤버 개수는 점점 늘어나게 된다.
그래서 상속을 받는다는 것은 조상 클래스를 확장(extend)한다는 의미로 해석할 수도 있으며 이것이 상속에 사용되는 키워드가 'extends'인 이유이기도 하다.
- 생성자와 초기화 블럭은 상속되지 않는다. 멤버만 상속된다. - 자손 클래스의 멤버 개수는 조상 클래스보다 항상 같거나 많다.
그렇기 때문에 조상 클래스만 변경해도 모든 자손 클래스에, 자손의 자손 클래스에 까지 영향을 미치기 때문에, 클래스 간의 상속관계를 맺어 주면 자손 클래스들의 공통적인 부분인 조상 클래스에서 관리하고 자손 클래스는 자신에 정의된 멤버들만 관리하면 되므로 각 클래스의 코드가 적어져서 관리가 쉬워진다.
다른 객체지향언어인 C++에서는 여러 조상 클래스로부터 상속받는 것이 가능한 '다중상속'을 허용하지만 자바에서는 단일 상속만을 허용한다.
Object 클래스 - 모든 클래스의 조상
Object 클래스는 모든 클래스 상속 계층도의 최상위에 있는 조상클래스이다.
super 키워드
메소드 오버라이딩
다이나믹 메소드 디스패치 (Dynamic Method Dispatch)
추상 클래스
final 키워드
Object 클래스
'IT 발자취... > JAVA' 카테고리의 다른 글
[whiteship] 온라인스터디 - 11주차 과제 : Enum (0) 2021.01.30 [whiteship] 온라인스터디 - 8주차.인터페이스 (0) 2021.01.09 [whiteship] 온라인스터디 - 5주차. 클래스 (0) 2020.12.19 [whiteship] 온라인스터디 - 4주차. 제어문 (0) 2020.12.12 [whiteship] 온라인스터디 - 3주차. 연산자 (0) 2020.11.28 댓글