2014년 4월 12일 토요일

자바상속과컴포지션(is a, has) Composition & Inheritance,[자바JSP/Servlet/JDBC/MiPlatform/XPlatform/교육/JSP/서블릿강좌/Spring교육잘하는곳/자바,JSP/spring/교육추천/JSP/JDBC실무교육] 아래 두 예문을 실습하고 그 차이점에 대해서 이해하시오. 상속과 컴포지션은 동전의 양면과 같이 유사하게 서로에게 관련이 있다. 상속은 마치 양파가 여러 껍질로 이루어진 것과 같이 계층화된 객체 컴포지션은 여러 재료(객체)가 한데 뭉쳐서 만들어진 죽 컴포지션은 개체들간의 'has a' 관계, 상속은 ‘is a’관계 상속과 컴포지션은 상호 배타적이지 않으며 개발자는 이 둘을 같이 사용한다. 아래 예제는 ‘is a’와 ‘has a’의 착각에는 나오게 되는 실수이다. 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; } } [출처] 오라클자바커뮤니티 - http://www.oraclejavanew.kr/bbs/board.php?bo_table=LecJava&wr_id=673 오라클자바커뮤니티에서 운영, 개발자 전문교육, 개인80%환급 오엔제이프로그래밍실무교육센터(www.onjprogramming.co.kr) 평일주간(9:30~18:30) 개강 (4/15)[기업100%환급]Spring ,MyBatis,Hibernate실무과정 (4/21)C#4.0,ADO.NET,Network 프로그래밍 (4/21)[기업100%환급]SQL기초에서 Schema Object까지 (4/21)[기업100%환급]PL/SQL,ORACLE HINT,TUNING (4/28)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지 평일야간(19:00~22:00) 개강 (4/14)웹퍼블리싱 마스터 (4/15)Spring3.X, MyBatis, Hibernate실무과정 (4/15)C#,ASP.NET마스터 (4/15)SQL초보에서실전전문가까지 (4/22)안드로이드개발자과정 주말(10:00~18:00) 개강 (4/19)웹퍼블리싱 마스터 (4/19)SQL초보에서실전전문가까지 (4/19)C#,ASP.NET마스터 (5/03)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지 (5/03)Spring3.X, MyBatis, Hibernate실무과정 (5/03)안드로이드개발자과정

자바상속과컴포지션(is a, has) Composition & Inheritance,[자바JSP/Servlet/JDBC/MiPlatform/XPlatform/교육/JSP/서블릿강좌/Spring교육잘하는곳/자바,JSP/spring/교육추천/JSP/JDBC실무교육]

아래 두 예문을 실습하고 그 차이점에 대해서 이해하시오.

상속과 컴포지션은 동전의 양면과 같이 유사하게 서로에게 관련이 있다. 
상속은 마치 양파가 여러 껍질로 이루어진 것과 같이 계층화된 객체
컴포지션은 여러 재료(객체)가 한데 뭉쳐서 만들어진 죽
컴포지션은 개체들간의 'has a' 관계, 상속은 ‘is a’관계
상속과 컴포지션은 상호 배타적이지 않으며 개발자는 이 둘을 같이 사용한다.
아래 예제는 ‘is a’와 ‘has a’의 착각에는 나오게 되는 실수이다.


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;
}

}

댓글 없음:

댓글 쓰기