PersistenceDelegate (Java Platform SE 6) - xrath.com 에서 번역됨

개요 | 패키지 | 클래스 | 사용 | 계층 트리 | 비추천 API | 색인 | 헬프

JavaTM Platform
Standard Ed. 6

앞의 클래스 다음의 클래스 | 프레임 있어 프레임 없음
개요: 상자 | 필드 | 생성자 | 메소드 | 상세: 필드 | 생성자 | 메소드

## java.beans
클래스 PersistenceDelegate

    java.lang.Object
      java.beans.PersistenceDelegate

직계의 기존의 서브 클래스:
  DefaultPersistenceDelegate

    public abstract class PersistenceDelegate

extends Object

PersistenceDeligate 클래스는, 클래스의 공개 API 에 포함되는 메소드에 의해, 지정된 클래스의 인스턴스 상태를 표현합니다. 예를 들어, 이 위양 모델을 채용하고 있는 `XMLEncoder` 등의 스트림은, 지금까지와 같이 지속성과 클래스 자체를 관련짓는 대신에,`ObjectOutputStream` 로 사용되는 `readObject` 메소드와 `writeObject` 메소드에 의해, 그 동작을 클래스로부터 떼어내 관리할 수가 있습니다. 일반적으로, 클래스는, 이 위양 schema를 사용해 이러한 정보나 규약을 간단하게 표현하는데 최적의 장소입니다. 그러나, 단 1 개의 클래스에 사소한 문제가 포함되어 있는 것만으로, 객체 그래프 전체의 기입을 할 수 없게 되는 경우도 있습니다. 이 경우, 어플리케이션 개발자는, 문제의 발생하고 있는 클래스의 그림자를 로컬로 독자적으로 작성하는지, 지속성을 유지하기 위한 그 외의 수법을 뽑게 됩니다. 이러한 상황으로 이 위양 모델을 이용하면, 어플리케이션 개발자는, 어플리케이션 자체에는 포함되지 않는 클래스의 구현으로 변경을 더하는 일 없이, 비교적 깨끗한 방법으로 직렬화 처리의 모든 국면을 제어할 수가 있습니다.

이 지속 schema는, 위양 모델을 사용한다고 하는 점 뿐만이 아니라, 대응하는 `readObject` 메소드없이 `writeObject` 메소드의 아날로그를 요구한다고 하는 점에서도, 종래의 직렬화 schema와는 다릅니다. `writeObject` 메소드의 아날로그는, 공개 API 를 사용해 개개의 인스턴스를 encode 합니다. 직렬화 된 폼의 read 수속은, Java 언어 스펙에 기록되고 있는 대로, 메소드 호출의 시멘틱스에 의해 정의되고 있기 (위해)때문에,`readObject` 메소드의 아날로그를 정의할 필요는 없습니다. 이 수법으로 작성된 어카이브(archive)가 참조처 클래스의 비공개 구현의 변경의 영향을 받지 않게 하려면 , 버젼 마다 변화한다고 생각되는 `writeObject` 와 `readObject` 의 구현의 의존관계(dependencies)을 제거할 필요가 있습니다.

이하와 같이, 지속적인 위양은, 객체의 지속성에 관한 모든 국면을 제어합니다.

- 어느 인스턴스를 같은 클래스내의 다른 인스턴스로 변경할 수 있을지 어떨지를 판단
- 공개 생성자 또는 공개 팩토리 메소드의 호출에 의해, 객체의 인스턴스를 작성
- 객체의 초기화를 실행

도입된 버젼:
  1.4
관련 항목:
  `XMLEncoder`

생성자 의 개요
`PersistenceDelegate ()`

메소드의 개요
`protected void` | `initialize (Class <? > type, Object oldInstance, Object newInstance, Encoder out)` `newInstance` 에 대해서, 새로운 인스턴스가 `oldInstance` 와 「등가」가 된다고 하는 부작용을 미치는 일련의 문장을 생성합니다.
`protected abstract Expression` | `instantiate (Object oldInstance, Encoder out)` 값 `oldInstance` 를 가지는 식을 돌려줍니다.
`protected boolean` | `mutatesTo (Object oldInstance, Object newInstance)` `newInstance` 에 일련의 문장을 적용하는 것으로써 `oldInstance` 와 등가의 카피를 작성할 수 있는 경우는 true 를 돌려줍니다.
`void` | `writeObject (Object oldInstance, Encoder out)` `writeObject` 는, 지속성을 실현하는 유일한 수단으로서`Encoder` 에 의해, 종래의 위양 모드로 사용됩니다.

클래스 java.lang. Object 로부터 상속된 메소드
`clone , equals , finalize , getClass , hashCode , notify , notifyAll , toString , wait , wait , wait`

생성자 의 상세

### PersistenceDelegate

    public PersistenceDelegate()

메소드의 상세

### writeObject

    public void writeObject(Object  oldInstance,
                            Encoder  out)

  `writeObject` 는, 지속성을 실현하는 유일한 수단으로서`Encoder` 에 의해, 종래의 위양 모드로 사용됩니다. 이 메소드는 파이널이 아닙니다만, 일반적으로, 서브 클래스화의 필요는 없습니다.

  이 구현은, 최초로, 스트림이 벌써 이 객체를 검출하고 있을지 어떨지를 확인합니다. 다음에, 스트림로부터 반환된 후보가 `oldInstance` 의 정확한 카피로 변경 가능한가 어떤가를 확인하기 위해(때문에),`mutatesTo` 메소드가 불려 갑니다. 변경 가능한 경우,`initialize` 메소드가 불려 가 초기화를 합니다. 변경할 수 없는 경우, 후보는 스트림로부터 삭제되어`instantiate` 메소드의 호출에 의해, 이 객체의 새로운 후보가 작성됩니다.

  파라미터:
    `oldInstance` - 이 식에서 작성되는 인스턴스
    `out` - 이 식이 기입해지는 스트림

### mutatesTo

    protected boolean mutatesTo(Object  oldInstance,
                                Object  newInstance)

  `newInstance` 에 일련의 문장을 적용하는 것으로써 `oldInstance` 와 등가의 카피를 작성할 수 있는 경우는 true 를 돌려줍니다. 이 메소드의 스펙에서는, 공개 API 에 포함되어 있는 관련 메소드의 동작을 비교했을 때, 변경 후의 인스턴스와 `oldInstance` 를 구별할 수 없는 경우에, 이것들을 「등가이다」라고 합니다. 덧붙여 엄밀하게 말하면,`hashCode` 나 `toString` 와 같은 메소드는, 전혀 분별이 되지 않는 인스턴스의 카피를 생성하는 것을 대부분의 클래스에 있어 방해하기 (위해)때문에, 여기에서는 「모든 메소드」라고 하는 표현은 아니고 「관련 메소드」라고 하는 표현을 사용하고 있습니다.

  2 개의 인스턴스의 클래스가 같은 경우는, 디폴트로 `true` 가 돌려주어집니다.

  파라미터:
    `oldInstance` - 카피되는 인스턴스
    `newInstance` - 변경되는 인스턴스
  반환값:
    `oldInstance` 로 일련의 변경을 적용하는 것에 의해, `newInstance` 와 등가의 카피를 작성할 수 있는 경우 true

### instantiate

    protected abstract Expression  instantiate(Object  oldInstance,
                                              Encoder  out)

  값 `oldInstance` 를 가지는 식을 돌려줍니다. 이 메소드를 사용해, 지정된 객체의 작성에 사용하는 생성자 또는 팩토리 메소드의 특징을 기술할 수 있습니다. 예를 들어,`Field` 클래스의 지속적인 위양의 `instantiate` 메소드는, 다음과 같이 정의됩니다.

       Field f = (Field) oldInstance;
       return new Expression(f, f.getDeclaringClass(), "getField", new Object[]{f.getName()});

  반환되는 식의 값을 선언하고 있기 (위해)때문에, 식의 값은 (`getValue` 로부터 반환되는 값과 같게) `oldInstance` 와 동일하게 됩니다.

  파라미터:
    `oldInstance` - 이 식에서 작성되는 인스턴스
    `out` - 이 식이 기입해지는 스트림
  반환값:
    치 `oldInstance` 를 가지는 식

### initialize

    protected void initialize(Class <? > type,
                              Object  oldInstance,
                              Object  newInstance,
                              Encoder  out)

  `newInstance` 에 대해서, 새로운 인스턴스가 `oldInstance` 와 「등가」가 된다고 하는 부작용을 미치는 일련의 문장을 생성합니다. 이 메소드의 스펙에서는, 메소드로부터 값이 반환된 뒤, 공개 API 에 포함되는 모든 메소드의 동작을 비교했을 때, 변경 끝난 인스턴스와 `newInstance` 를 구별할 수 없는 경우에, 이것들을 「등가이다」라고 합니다.

  일반적으로, 구현은,`oldInstance` 와 그 공개 가능 상태 외에, 무엇이 일어났는지를 나타내는 일련의 문장을 생성하는 것으로써, 이 목적을 달성합니다. 이러한 문장은, read시에 입력 스트림 상태를 시뮬레이트 하는 복제된 환경의 요소가 포함된 식을 돌려주는 `writeExpression` 메소드에 의해, 출력 스트림에 송신됩니다. 반환되는 각 문은, 낡은 환경의 모든 인스턴스를 새로운 환경의 객체로 옮겨놓습니다. 특히, 이러한 문장의 타겟의 참조 (처음은 `oldInstance` 에의 참조)는,`newInstance` 의 참조로서 돌려주어집니다. 이러한 문장을 실행하면(자), 새로운 환경의 객체로 변경이 더해지는 것과 동시에, 2 개의 객체 상태가 서서히 가까워져 갑니다. Initialize 메소드가 돌려주어질 때는, 공개 API 로 2 개의 인스턴스를 구별할 수 없게 되고 있을 것입니다. 무엇보다 중요한 것은, 이러한 객체를 등가로 하는 수속이 출력 스트림에 의해 기록되어 스트림의 플래시시에 실제의 출력을 형성한다고 하는 점입니다.

  디폴트 구현은, 이 형태의 슈퍼 클래스의 `initialize` 메소드를 호출합니다.

  파라미터:
    `oldInstance` - 카피되는 인스턴스
    `newInstance` - 변경되는 인스턴스
    `out` - 초기화문이 기입해지는 스트림

개요 | 패키지 | 클래스 | 사용 | 계층 트리 | 비추천 API | 색인 | 헬프

JavaTM Platform
Standard Ed. 6

앞의 클래스 다음의 클래스 | 프레임 있어 프레임 없음
개요: 상자 | 필드 | 생성자 | 메소드 | 상세: 필드 | 생성자 | 메소드

버그의 보고와 기능의 요청
한층 더 자세한 API 레퍼런스 및 개발자 문서에 대해서는,Java SE 개발자용 문서를 참조해 주세요. 개발자전용의 상세한 해설, 개념의 개요, 용어의 정의, 버그의 회피책, 및 코드 실례가 포함되어 있습니다.

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.