우주코딩
상속 문법의 존재 이유, 상속 사용 본문
상속 문법이 등장한 이유
기능 추가 방법 1: 기존 코드를 변경한다.
기존의 클래스에 코드나 기능을 계속해서 추가, 변경하여 사용하면 누더기 코드가 된다.
이는 기존 코드에 영향을 미쳐 오류를 일으키거나 유지보수가 힘들어지는 문제가 있다.
기능 추가 방법 2: 기존 코드를 복사하여 기능을 추가, 변경한 새로운 클래스를 만든다.
기존 코드를 손대지 않기 때문에 기존 코드로 만든 프로그램에 영향을 끼치지 않는다. 깔끔하게 기능을 추가, 변경하는 것이 가능하다.
하지만 같은 기능을 하는 클래스(중복 코드)가 여러 개가 있으면 관리하기 힘들 수 있다.
원본 코드에 버그가 있다면 모든 복사 클래스에서 버그를 찾아 없애줘야한다.
기존 코드를 변경한다면 모든 복제 코드 또한 변경해야한다.
유지보수가 번거롭다.
기능 추가 방법 3: 기존의 코드를 손대지 않고 기능을 확장하는 상속 을 이용한다.
기존 코드를 그대로 활용하면서 새 기능만 추가한 클래스를 만든다.
extends 기존 클래스명
기존 클래스의 소스가 필요없다.
간단한 선언으로 상속 받고 새 기능만 추가하면 된다.
하지만 상속을 받는다는 전제하에 기능의 취사선택이 불가능하다. 모든 기능을 상속받는다.
기존 코드를 가져오는 것이 아닌 기존 코드를 사용한다는 의미다.
기존의 코드를 재정의 하는 것을 overriding 이라고 한다.
기존 방법을 안쓰겠다는 의미가 아닌 '상속' 이라는 방법을 쓸 수 있다는 의미이다.
무조건 상속 문법을 사용해야한다는 의미가 아니다. 상황에 따라 어느 방법이 적절한지 판단 하에 사용해야한다.
상속 사용
상속 받는다는 것은 수퍼 클래스의 코드를 그대로 복제해 온다는 것이 아니다.
그냥 수퍼 클래스의 코드를 사용할 수 있는 권한을 획득한다는 것이다.
메서드를 호출할 때 상속 클래스 관계에 따라 주소값의 클래스에서 상위 클래스로 찾아간다.
그래서 서브 클래스를 사용하려면 반드시 서브 클래스가 상속 받는 모든 조상 클래스가 있어야 한다. 하나의 수퍼 클래스라도 없다면 classnotfound 에러가 발생한다.
'자바 본 강의' 카테고리의 다른 글
상속과 생성자, 다중 상속, Specialization / Generalization , 추상 클래스, 추상화 문법, 추상 메서드 (0) | 2021.07.30 |
---|---|
상속 클래스 로딩과 인스턴스 생성 과정, 생성자 호출 순서 (0) | 2021.07.28 |
생성자 활용 (0) | 2021.07.28 |
클래스와 생성자, 인스턴스 필드와 블록 (0) | 2021.07.27 |
의존 객체, 클래스 간의 관계, 생성자 선언, 패키지의 분류 (0) | 2021.07.26 |