[자바상속컴포지션]Java Inheritance & Composition
상속과 컴포지션은 동전의 양면과 같이 유사하게 서로에게 관련이 있다.
상속은 마치 양파가 여러 껍질로 이루어진 것과 같이 계층화된 객체
컴포지션은 여러 재료(객체)가 한데 뭉쳐서 만들어진 죽
컴포지션은 개체들간의 'has a' 관계, 상속은 ‘is a’관계
상속과 컴포지션은 상호 배타적이지 않으며 개발자는 이 둘을 같이 사용한다.
다음 예제는 ‘is a’와 ‘has a’의 착각에는 나오게 되는 실수이다.
1. 원은 반지름 값을 갖는 하나의 점이다(a Circle is a Point with a radius.)
그래서 Circle은 Point를 상속
class Point {
private double x, y;
Point(double x, double y) {
this.x = x;
this.y = y;
}
this.x = x;
this.y = y;
}
double getX() {
return x;
}
return x;
}
double getY() {
return y;
}
}
return y;
}
}
class Circle extends Point {
private double radius;
private double radius;
Circle(double x, double y, double radius) {
super(x, y);
this.radius = radius;
}
super(x, y);
this.radius = radius;
}
double getRadius() {
return radius;
}
}
return radius;
}
}
2. 원은 한 점과 반지름을 가지고 있다(a circle has a point and a radius)
class Point {
private double x, y;
private double x, y;
Point(double x, double y) {
this.x = x;
this.y = y;
}
this.x = x;
this.y = y;
}
//redundant code 로 인한 유지보수 어려움(코드의 재사용 실패)
double getX() {
return x;
}
double getX() {
return x;
}
double getY() {
return y;
}
}
return y;
}
}
class Circle {
private Point p;
private double radius;
private Point p;
private double radius;
Circle(double x, double y, double radius) {
p = new Point(x, y);
this.radius = radius;
}
p = new Point(x, y);
this.radius = radius;
}
double getX() {
return p.getX();
}
return p.getX();
}
double getY() {
return p.getY();
}
return p.getY();
}
double getRadius() {
return radius;
}
}
return radius;
}
}
오라클자바커뮤니티에서 설립한 개발자교육6년차 오엔제이프로그래밍 실무교육센터(오라클SQL,튜닝,힌트,자바프레임워크,안드로이드,아이폰,닷넷 실무개발강의)
댓글 없음:
댓글 쓰기