2013년 10월 22일 화요일

[자바상속컴포지션]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; } 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); this.radius = radius; } double getRadius() { return radius; } } 2. 원은 한 점과 반지름을 가지고 있다(a circle has a point and a radius) class Point { private double x, y; Point(double x, double y) { this.x = x; this.y = y; } //redundant code 로 인한 유지보수 어려움(코드의 재사용 실패) 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=601 오라클자바커뮤니티에서 설립한 개발자교육6년차 오엔제이프로그래밍 실무교육센터(오라클SQL,튜닝,힌트,자바프레임워크,안드로이드,아이폰,닷넷 실무개발강의) www.onjprogramming.co.kr [개강확정강좌]오라클자바커뮤니티에서 운영하는 개발자 전문교육 ,개인80%환급(www.onjprogramming.co.kr) [주말] [10/26]C#,ASP.NET마스터 [10/26]Spring3.X, MyBatis, Hibernate실무과정 [10/27]JAVA&WEB프레임워크실무과정 [평일야간] [10/29]C#,ASP.NET마스터 [10/25]Spring3.X, MyBatis, Hibernate실무과정 [10/31]JAVA&WEB프레임워크실무과정 [주간] [11/4]Spring3.X, MyBatis, Hibernate실무과정 [기타 다른 강좌는 아래 해당 카테고리를 클릭해주세요] JAVA ORACLE iPhone/Android .NET 표준웹/HTML5 채용/취업무료교육 초보자(재학생)코스

[자바상속컴포지션]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;
 }
 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);
  this.radius = radius;
 }
 double getRadius() {
  return radius;
 }
}
 
2. 원은 한 점과 반지름을 가지고 있다(a circle has a point and a radius)
 
class Point {
 private double x, y;
 Point(double x, double y) {
  this.x = x;
  this.y = y;
 }
 //redundant code 로 인한 유지보수 어려움(코드의 재사용 실패)
 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;
 }
}

오라클자바커뮤니티에서 설립한 개발자교육6년차 오엔제이프로그래밍 실무교육센터(오라클SQL,튜닝,힌트,자바프레임워크,안드로이드,아이폰,닷넷 실무개발강의)  


[기타 다른 강좌는 아래 해당 카테고리를 클릭해주세요]

댓글 없음:

댓글 쓰기