오라클자바커뮤니티/자바
상속과 컴포지션
sus
2014. 10. 12. 04:42
1. Point를 상속하는 경우 원은 반지름 값을 갖는 하나의 점이다(a Circle is a Point with a radius.) class Point { private double x, y; Point(double x, double y) { this.x = x; this.y = y; } double getX() { return x; } double getY() { return y; } } class Circle extends Point { private double radius; Circle (double x, double y, double radius) { super (x, y); // Call Point (double x, double y) this.radius = radius; } double getRadius () { return radius; } } 2. 포인트를 상속하지 않고 Circle안에서 new 하는 경우 (원은 한 점과 반지름을 가지고 있다(a circle has a point and a radius)) ==> 아래 코드는 Point의 getX, getY를 다시 만듦으로 redundant code 로 인한 유지보수 어려움(코드의 재사용 실패) 문제가 있고 class Point { private double x, y; Point(double x, double y) { this.x = x; this.y = y; } double getX() { return x; } double getY() { return y; } } class Circle { private Point p; private double radius; Circle(double x, double y, double radius) { p = new Point(x, y); this.radius = radius; } double getX() { return p.getX(); } double getY() { return p.getY(); } double getRadius() { return radius; } } [예제] package day3; class Point { private double x, y; Point(double x, double y) { this.x = x; this.y = y; } double getX() { return x; } double getY() { return y; } } //상속 class Circle1 extends Point { private double radius; Circle1 (double x, double y, double radius) { super (x, y); // Call Point (double x, double y) this.radius = radius; } double getRadius () { return radius; } } //컴포지션 class Circle2 { private Point p; private double radius; Circle2(double x, double y, double radius) { p = new Point(x, y); this.radius = radius; } double getX() { return p.getX(); } double getY() { return p.getY(); } double getRadius() { return radius; } } public class CircleTest { public static void main(String[] args) { Circle1 c1 = new Circle1(1,1, 10); System.out.println(c1.getX()); System.out.println(c1.getX()); System.out.println(c1.getRadius()); Circle2 c2 = new Circle2(1,1, 10); System.out.println(c2.getX()); System.out.println(c2.getX()); System.out.println(c2.getRadius()); } }