레이블이 자바 Object인 게시물을 표시합니다. 모든 게시물 표시
레이블이 자바 Object인 게시물을 표시합니다. 모든 게시물 표시

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,튜닝,힌트,자바프레임워크,안드로이드,아이폰,닷넷 실무개발강의)  


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

2013년 10월 21일 월요일

[자바 상수 객체, Java Constant Object] 상수 객체란 final변수와 같이...

[자바 상수 객체, Java Constant Object]
 
상수 객체란 final변수와 같이 객체의 내용을 변경 할수 없는 객체를 말한다.
 
객체의 내용을 외부에서 수정하지 못하게 하기 위해서는 인스턴스 변수는 모두 final로 선언하거나, private으로 선언한다.
 
인스턴스 변수를 수정하는 메쏘드는 외부에서 접근하지 못하게 private으로 선언
예) String, Integer 등은 그 내용을 수정 할 수 없도록 위와 같이 만들어져 있다.
 
final로 선언된 변수가 참조형 일 경우에는 그 변수의 참조 값을 바꿀 수는 없으나 그 변수가 참조하고 있는 객체나 배열의 내용은 수정 가능하다.

[예제, ConstObjectTest.java]
 
package onj;
class ConstClass
{
    final int v1;
    private int v2;
    
    ConstClass( int value1, int value2 )
    {
        v1 = value1;
        v2 = value2;
    }
    int getV2()
    {
        return v2;
    }
}
class NonConstClass
{
    int v=999;
}
class ConstObjectTest
{
    public static void main( String[] args )
    {
        ConstClass obj = new ConstClass(1, 2);
        
        System.out.println( "obj.v1 = " + obj.v1 );
        System.out.println( "obj.getV2() = " + obj.getV2() );
        // obj.v1 = 3;  // 오류: 화이널 변수이므로 대입 불가
        // obj.v2 = 4;  // 오류: private 변수이므로 접근 불가
        final NonConstClass obj2 = new NonConstClass();
        // obj2 = new NonConstClass(); // 오류: 화이널 참조 변수이므로 수정 불가
     // 화이널 참조값을 통하여 객체의 내용 수정 가능하다,
        obj2.v = 3;            
    }
}
 
[결과]
 
obj.v1 = 1
obj.getV2() = 2
 

2013년 8월 1일 목요일

Java.lang.Object 클래스

자바의 모든 클래스는 Object 클래스의 하위 클래스이므로 Object 클래스의 모든 메소드를 사용할 수 있다. Object 클래스의 메소드는 클래스의 객체를 조작하기 위한 가장 기본적인 메소드만을 제공하는데 그 중 주요 메소드만을 소개하면 다음과 같다. 

public java.lang.Class getClass() 
  현재 객체의 원형 클래스에 대한 정보를 자바의 Class 타입으로 반환하는 메소드이다. 두개의 객체가 동일 클래스의 객체인지 비교할 때 유용하다. 

public boolean equals(Object obj)
  현재 객체가 다른 객체(obj)와 내용이 동일한지를 비교하는 메소드이다. 이 메소드는 객체의 내부 필드와 메소드의 구조가 완전히 동일하고 또 필드에 설정되어 있는 값도 동일한지를 비교한다. 

protected java.lang.Object clone() 
  객체를 완전히 복사할 때 사용하는 메소드이다. =의 경우는 참조하는 위치만 전달하지만 clone의 경우는 새로운 객체를 만들어 값까지 동일하게 복사한다. 

public java.lang.String toString() 
  객체를 문자열의 형태로 변환하는 데 사용하는 메소드이다. 보통 객체를 대표할 수 있는 값을 문자열로 반환한다. 
 
protected void finalize()
객체가 더이상 사용되지 않을 때 쓰레기 수집기에 의해 수행되는 메소드이다. 이 메소드는 객체가 사용한 파일이나 데이터베이스를 닫을 때 주로 사용된다.