객체지향 프로그래밍(25강 - 32강)
01 Jan 2020상속
-
새로운 클래스를 정의할 때 이미 구현된 클래스를 상속(inheritance) 받아서 속성이나 기능이 확장되는 클래스 구현
class A { ... } class B extends A { ... } - 상위 클래스는 하위 클래스보다 일반적인 개념과 기능을 가짐
- 하위 클래스는 보다 구체적인 개념과 기능을 가짐
- 자바는 single inheritance만 지원하여
extends뒤에는 하나의 class만 사용 가능
protected 예약어
- 외부 클래스에는 private으로, 하위 클래스에는 public의 기능을 구현한 키워드
- 상위 클래스에 protected로 선언된 변수나 메서드는 다른 외부 클래스에서는 사용할 수 없으나, 하위 클래스에서는 사용 가능
접근 제한자의 가시성
| 접근 제한자 | 외부 클래스 | 하위 클래스 | 동일 패키지 | 내부 클래스 |
|---|---|---|---|---|
| public | O | O | O | O |
| protected | X | O | O | O |
| 선언되지 않음 (default) |
X | X | O | O |
| private | X | X | X | O |
상속에서의 메모리 상태
- 상위 클래스의 인스턴스가 먼저 생성
- 그 후, 하위 클래스의 인스턴스가 생성
상위 클래스로의 묵시적 형 변환(upcasting)
- 상위 클래스 형으로 변수를 선언하고 하위 클래스 인스턴스를 생성할 수 있음
- 하위 클래스는 상위 클래스의 타입을 내포하고 있으므로 상위 클래스로 묵시적 형 변환 가능
- 상속 관계에서 모든 하위 클래스는 상위 클래스로 묵시적 형 변환이 되지만 그 역은 성립하지 않음
Method overriding
오버라이딩(Overriding)
- 상위 클래스에 정의된 메서드의 구현 내용이 하위 클래스에서 구현할 내용과 맞지 않는 경우 하위 클래스에서 동일한 이름의 메서드를 재정의 할 수 있음
가상 메서드(Virtual method)
- 메서드의 이름과 메서드 주소를 가진 가상 메서드 테이블에서 호출될 메서드의 주소 참조
다형성(Polymorphism)
- 하나의 코드가 여러 자료형으로 구현되어 실행되는 것
- 같은 코드에서 여러 실행 결과가 나옴
- 정보 은닉, 상속과 더불어 객체 지향 프로그래밍의 특징 중 하나
- 객체 지향 프로그래밍의 유연성, 재활용성, 유지보수성에 기본이 되는 특징
- 장점
- 다양한 여러 클래스를 하나의 자료형(상위 클래스)으로 선언하거나 형 변환하여 각 클래스가 동일한 메서드를 오버라이딩한 경우, 하나의 코드가 다양한 구현을 실행할 수 있음
- 유사한 클래스가 추가되는 경우 유지보수에 용이
- 각 자료형마다 다른 메서드를 호출하지 않으므로 코드에서 많은 if문이 사라짐
상속은 언제 사용하는가
IS-A 관계(is a relationship: inheritance)
- 일반적인 개념과 구체적인 개념과의 관계
- 단순히 코드를 재사용하는 목적으로 사용하지 않음
HAS-A 관계(composition)
- 한 클래스가 다른 클래스를 소유한 관계
- 코드 재사용의 한 방법
다운캐스팅(Downcasting)
- 묵시적으로 상위 클래스 형 변환 된 인스턴스가 원래 자료형(하위 클래스)으로 변환되어야 할 때
- 하위 클래스로의 형 변환은 명시적으로 되어야 함