5장 상속
객체간의 관계
A has-a B: 객체 A가 객체 B를 가지고 있음, A가 B로 구성됨. A에 B가 포함됨. 자동차는 바퀴4개와 엔진을 가지고 있음.A is-a B: 객체 A는 객체 B이다. 학생은 사람이다. B가 더 일반화된 객체임.
A has-a B
- composition: 자동차는 엔진을 가지고 있음. 엔진이 없으면 자동차는 의미가 없음.- aggregation: 호수에 물고기가 있음. 물고기가 없어져도 호수는 존재함.
보통 B는 클래스 A의 필드(속성, 멤버 변수)로 표현됨.
Car has-a Engine
class Engine {}
class Car {
private Engine engine;
Car() {
engine = new Engine();
}
Car(Engine e) {
engine = e;
}
}
A is-a B
A는 B의 한정(전문, specialized)된 객체, B는 A의 일반(generalized)화된 객체Java와 같은 객체지향 언어에서는 상속(inheritance)를 통해 표현됨.
Student is a Person
class Person {private String id_card;
}
class Student extends Person {
private String student_id_card;
}
상속 받은 클래스를 서브클래스(subclass, 자식), 상속된 클래스를 슈퍼클래스(superclass, 부모)라고 함.
Person이 슈퍼클래스, Student가 서브클래스
실습
호수의 물고기 시뮬레이션
Lake has-a Fish
1. Lake의 Fish를 10마리로 늘려보자.
Fish를 배열로 만들 것!
Fish를 배열로 만들 것!
2. 10마리 Fish 중 홀수 인덱스는 원래 대로 랜덤하게 움직이게 하고, 짝수 인덱스 Fish는 x, y를 무조건 1씩 증가하도록 움직이게 해보자.
새로운 Fish2 클래스를 만들어도 되고, Fish 클래스에 새로운 움직임 메소드를 만들어도 됨.