[java] 물체를 수화시키는 것은 무엇을 의미합니까?

누군가 수분을 공급하는 것에 대해 이야기 할 때, 그것은 무엇을 의미합니까?

웹에서 Hydrate라는 Java 프로젝트를보고 다른 표현간에 데이터를 변환합니다 (RDMS에서 OOPS에서 XML로). 이것이 객체 수화의 일반적인 의미입니까? 표현간에 데이터를 변환하기 위해? 저장된 표현에서 객체 계층 구조를 재구성하는 것을 의미 할 수 있습니까?



답변

보다 일반적인 용어 수화물 과 관련하여

개체 수화는 메모리에 존재하지만 아직 도메인 데이터 ( “실제”데이터)를 포함하지 않는 개체를 가져온 다음 도메인 데이터 (예 : 데이터베이스, 네트워크 또는 파일)로 채 웁니다. 체계).

이 답변에 대한 Erick Robertson의 의견 :

역 직렬화 == 인스턴스화 + 수화

블리 스터링 성능에 대해 걱정할 필요가없고 데이터 액세스 API 내부에있는 성능 최적화를 디버깅하지 않는 경우 수화를 명시 적으로 처리하지 않아도됩니다. 일반적으로 대신 역 직렬화를 사용하므로 코드를 적게 작성할 수 있습니다. 일부 데이터 액세스 API는이 옵션을 제공하지 않으므로 이러한 경우 수화 단계를 명시 적으로 호출해야합니다.

수화 개념에 대한 자세한 내용은 동일한 질문에 대한 Erick Robertson의 답변 을 참조하십시오 .

수화물이라는 Java 프로젝트 와 관련하여

이 프레임 워크에 대해 구체적으로 물었으므로 조사했습니다.

내가 알 수있는 한,이 프로젝트가 “수화물”이라는 단어를 매우 일반적인 의미로 사용하지 않았다고 생각합니다. 제목에서 “직렬화”의 대략적인 동의어로 사용됩니다. 위에서 설명한 것처럼이 사용법은 완전히 정확하지 않습니다.

참조 : http://en.wikipedia.org/wiki/Serialization

데이터 구조 또는 객체 상태를 […]로 저장하고 나중에 동일하거나 다른 컴퓨터 환경에서 재구성 할 수있는 형식으로 변환.

Hydrate FAQ 에서 직접 그들의 이름 뒤에 이유를 찾을 수는 없지만 그들의 의도에 대한 단서가 있습니다. 라이브러리의 목적은 일반적인 사운드와 유사한 Hibernate 프레임 워크 와 유사하기 때문에 “수화물”이라는 이름을 선택했다고 생각 합니다.

Hibernate를 포함한 대부분의 ORM은 데이터베이스 내에서 두 번째로 고려해야 할 메모리 내 객체 모델 지향 접근법을 취한다. Hydrate 라이브러리는 대신 데이터베이스 스키마 중심의 접근 방식을 취하여 관계형 데이터 구조를 유지하고 프로그램이보다 깔끔하게 작동하도록합니다.

이 라이브러리의 이름과 관련하여 은유 적으로 말하면, 수화물 은 “사용할 수있는 무언가를 만드는 것”( 건조한 음식을 재수 화하는 것과 같은)과 같습니다 . 그것은 Hibernate 의 은유 적 반대이다 . 이것은 “겨울을 위해 무언가를 버리는 것”과 비슷하다 ( Animal Hibernation ).

내가 말할 수있는 한, 수화물 라이브러리의 이름을 결정하는 것은 일반적인 컴퓨터 프로그래밍 용어 “수화물”과 관련이 없었다.

일반적인 컴퓨터 프로그래밍 용어 “수화물”을 사용할 때, 성능 최적화는 일반적으로 동기 부여 (또는 기존 최적화 디버깅)입니다. 라이브러리가 개체가 데이터로 채워지는시기와 방법에 대한 세부적인 제어를 지원하더라도 타이밍과 성능은 이름이나 라이브러리 기능의 주요 동기가 아닌 것 같습니다. 라이브러리는 엔드-투-엔드 매핑 및 스키마 보존을 활성화하는 데 더 관심이있는 것 같습니다.


답변

수화 란 물체로 데이터를 채우는 과정을 말합니다. 아직 수화되지 않은 개체가 인스턴스화되어 데이터가있는 개체를 나타내지 만 아직 데이터가 개체에로드되지 않았습니다. 이것은 성능상의 이유로 수행되는 것입니다.

또한 수화라는 용어는 데이터베이스 또는 다른 데이터 소스에서 데이터를로드하기위한 계획을 논의 할 때 사용됩니다. 여기 몇 가지 예가 있어요.

일부 필드 만로드했지만 일부는로드하지 않은 경우 오브젝트가 부분적으로 수화되었다고 말할 수 있습니다. 다른 필드는 현재 작업에 필요하지 않기 때문에이 작업을 수행 할 수 있습니다. 따라서 사용하지 않을 때이 데이터를로드, 전송 및 설정하는 데 대역폭과 CPU 사이클을 낭비 할 이유가 없습니다.

또한 Doctrine과 같은 일부 ORM은 인스턴스화 될 때 오브젝트를 수화시키지 않고 해당 오브젝트에서 데이터에 액세스 할 때만 수화합니다. 이것은 사용하지 않을 데이터를로드하지 않는 데 도움이되는 방법 중 하나입니다.


답변

이 Merlyn가 언급 한 바와 같이 다소 중복 고장이지만, 내 경험으로는 의미 이 정확해야 할 때 유용한 단어입니다, 그래서 그것을 생성 / 인스턴스화하지 개체를 채우는 / 충전에.


답변

이것은 매우 오래된 질문이지만 다음 용어의 의미에 대해 여전히 혼란스러워하는 것 같습니다. 바라건대, 이것은 명확해질 것입니다.

수화 시키다

“데이터를 기다리는 객체가 수화되기를 기다리는 것”과 같은 설명을 보면 혼란스럽고 오해의 소지가 있습니다. 물체는 물건을 기다리지 않으며 수화는 물체로 데이터를 채우는 행위입니다.

JavaScript를 예로 사용 :

const obj = {}; // empty object
const data = { foo: true, bar: true, baz: true };

// Hydrate "obj" with "data" 
Object.assign(obj, data);
console.log(obj.foo); // true
console.log(obj.bar); // true
console.log(obj.baz); // true

값을 추가하는 obj것은 “수화”입니다. 나는 Object.assign()이 예제에서 사용 하고 있습니다.

“직렬화”및 “직렬화 해제”라는 용어는 다른 답변에서도 언급되었으므로 다음은 이러한 개념의 의미를 수화로부터 명확하게하는 데 도움이되는 예입니다.

직렬화

console.log(JSON.stringify({ foo: true, bar: true, baz: true }));

역 직렬화

console.log(JSON.parse('{"foo":true,"bar":true,"baz":true}'));


답변