📖이전글
객체지향 프로그래밍(1)-클래스와 객체,객체지향의의미,장단점
목차
상속(inheritance)
상속이란 객체지향의 4가지 특징중 하나로, 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것이다. 상위 클래스의 특성을 하위 클래스에서 상속하고 거기에 더해 필요한 특성을 추가, 확장해서 사용할 수 있다.
조류 클래스와 포유류 클래스를 만들어보면, 조류는 알을 낳고 포유류는 새끼를 낳지만 먹고 자고 싸는 것은 같다. 그리고 만약 '걷다' 라는 속성을 추가하려면 조류와 포유류 클래스에 모두 추가를 해주어야 하는데, 만약 클래스의 개수가 많다면 노가다이기도 하고 빼먹을 위험성도 크다. 이를 해결하려면 공통 특성을 빼내 동물 클래스를 만들고, 조류와 포유류에서는 동물클래스를 상속받으면 된다.
동물과 조류,포유류의 관계는 다음과 같이 설명할 수도 있다.
구현하는 방법
상속을 구현하는 방법은 위 그림에서와 같이 extends 키워드를 사용하면 된다.
사용하는 이유
상속을 통해 클래스를 작성하면 적은 양의 코드로 새로운 클래스를 작성할 수 있다.
코드를 공통적으로 관리 -> 코드의 추가 및 변경 용이
상속의 장점
코드의 재사용성을 높이고 중복을 제거하여 생산성과 유지보수에 크게 기여한다.
상속의 특징
1. 하위 클래스가 변경되어도 상위 클래스에 아무런 영향을 주지 못한다.
동물 클래스를 상속받은 조류 클래스는 다음과 같은 행동을 할 수 있다.
먹다, 자다, 싸다, 걷다, 알을 낳다.
만약 조류 클래스에 '날다'를 추가하더라도 상위클래스인 동물 클래스에는 영향이 가지 않는다.
하지만 동물 클래스에 '뛰다'를 추가하게 되면 조류 클래스에 영향이 가게 된다.
그림으로 쉽게 이해할 수 있다.
2. 단일상속만 허용한다.
다중상속을 허용하면 여러 클래스로부터 상속받을 수 있기 때문에 복합적인 기능을 가진 클래스를 쉽게 작성 할 수 있겠지만, 클래스간의 관계가 매우 복잡해지고 다른 클래스로부터 상속받은 멤버간의 이름이 같은 경우 구별할 수 있는 방법이 없기 때문에 다중상속을 허용하지 않는다.
그 외에도 다음과 같은 특징이 있다.
- 생성자와 초기화 블럭은 상속되지 않는다. 멤버만 상속된다.
- 하위 클래스의 멤버 개수는 상위 클래스보다 항상 같거나 많다.
참고
자바의 정석-남궁성
스프링 입문을 위한 자바 객체지향의 원리와 이해-김종민