주요 콘텐츠

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

saveobj

R2026a

객체의 저장 절차 사용자 지정

설명

참고

mixin을 사용하면 속성의 추가, 삭제, 이름 바꾸기 기능을 포함하여 객체 직렬화와 역직렬화를 더 효과적으로 제어할 수 있기 때문에 loadobj와 saveobj보다는 matlab.mixin.CustomElementSerialization 클래스가 권장됩니다. (R2024b 이후)

b = saveobj(a)는 a의 클래스가 saveobj 메서드를 정의하는 경우 save 함수에 의해 호출됩니다. save는 반환된 값 b를 MAT 파일에 씁니다.

예제

예제

모두 축소

ContactEntry 클래스는 세 개의 속성을 정의합니다. 클래스는 이러한 속성값을 구조체에 저장하는 saveobj 메서드와 저장된 구조체에서 객체를 다시 만드는 loadobj 메서드를 정의합니다.

classdef ContactEntry
   properties
      Name
      Email
      Cell
   end
   methods
      function s = saveobj(obj)
         s.Name = obj.Name;
         s.Email = obj.Email;
         s.Cell = obj.Cell;
      end
   end
   methods (Static)
      function obj = loadobj(s)
         if isstruct(s)
            newObj = ContactEntry;
            newObj.Name = s.Name;
            newObj.Email = s.Email;
            newObj.Cell = s.Cell;
            obj = newObj;
         else
            obj = s;
         end
      end
   end
end

ContactEntry의 인스턴스를 만들고 저장합니다.

a = ContactEntry;
a.Name = "Sandy Trent";
a.Email = "strent@notacompany.com";
a.Cell = "617-555-1212";
save("C:\yourpath\ContactFile.mat","a");

회사 전화번호가 들어 있는 새 속성을 포함하도록 ContactEntry를 수정합니다.

classdef ContactEntry
   properties
      Name
      Email
      Cell
      WorkPhone
   end
   properties (Transient,Hidden)
      SaveInOldFormat = false;
   end
   methods
      function s = saveobj(obj)
         s.Name = obj.Name;
         s.Email = obj.Email;
         s.Cell = obj.Cell;
         if ~obj.SaveInOldFormat
             s.WorkPhone = obj.WorkPhone;
         end
      end
   end
   methods (Static)
      function obj = loadobj(s)
         if isstruct(s)
            newObj = ContactEntry;
            newObj.Name = s.Name;
            newObj.Email = s.Email;
            newObj.Cell = s.Cell;
            if numel(fieldnames(s)) == 4
                newObj.WorkPhone = s.WorkPhone;
            else
                newObj.WorkPhone = "unknown";
            end
            obj = newObj;
         else
            obj = s;
         end
      end
   end
end
두 클래스 버전 간의 호환성을 유지하려면 다음 사항에 유의하십시오.

  • 직렬화된 구조체에서 네 번째 필드를 검사하도록 loadobj 메서드가 수정되었습니다. 네 번째 필드가 있는 경우 loadobj는 WorkPhone 속성을 그 값으로 설정합니다. 필드가 없으면 WorkPhone 속성은 "unknown"으로 설정됩니다.

  • 숨겨진 새로운 과도형(transient) 속성인 SaveInOldFormat을 사용하면 클래스 사용자가 WorkPhone 속성값 없이 이전 형식으로 클래스 인스턴스를 직렬화할지 여부를 지정할 수 있습니다. saveobj 메서드는 SaveInOldFormat이 false인 경우에만 WorkPhone 값을 저장합니다.

기존 인스턴스 a를 메모리에서 지우고 클래스의 새 정의에서 a를 불러옵니다. 수정된 loadobj 메서드는 저장된 데이터를 이전 버전 클래스의 데이터로 인식하고 WorkPhone을 적절하게 설정합니다.

clear a
load("C:\yourpath\ContactFile.mat","a")
a
a = 

  ContactEntry with properties:

         Name: "Sandy Trent"
        Email: "strent@notacompany.com"
         Cell: "617-555-1212"
    WorkPhone: "unknown"
마찬가지로 WorkPhone 값을 사용하여 클래스의 새 인스턴스를 만들 수 있으며 saveobj와 loadobj 메서드 모두 새 클래스 정의에서 예상대로 값을 저장하고 불러옵니다.

입력 인수

모두 축소

직렬화할 객체입니다.

출력 인수

모두 축소

MATLAB®에 의해 save 함수에 전달된 데이터로, 다음이 될 수 있습니다.

  • 객체

  • 구조체에 저장된 속성 이름 및 현재 값

팁

  • 스칼라 객체나 구조체로 작업할 수 있도록 saveobj 메서드를 구현하십시오. 객체 배열을 저장하면 save는 배열의 각 요소에서 saveobj를 호출합니다.

버전 내역

R2006a 이전에 개발됨