주요 콘텐츠

loadobj

객체의 불러오기 절차 사용자 지정

설명

참고

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

b = loadobj(a)a로 표현된 객체를 역직렬화합니다. 클래스의 객체를 MAT 파일에서 불러올 때 특수 처리가 필요하다면 loadobj 메서드를 정의해야 합니다. saveobj 메서드를 정의했다면 loadobj 메서드를 정의하여 객체를 원하는 상태로 복원해야 합니다. 객체의 클래스가 loadobj 메서드를 정의하는 경우 load는 그 메서드를 자동으로 호출합니다.

예제

예제

모두 축소

리스너는 객체로 직렬화할 수 없습니다. 클래스가 리스너를 정의하는 경우 인스턴스가 역직렬화될 때 loadobj를 사용하여 리스너를 복원할 수 있습니다.

BankAccount 클래스를 정의합니다. 이 클래스는 AccountBalance 속성과 AccountStatus 속성을 포함합니다. 과도 속성 AccountManagerListenerAccountBalance의 값을 기반으로 AccountStatus를 변경하는 리스너 객체를 유지합니다.

classdef BankAccount < handle
   properties (SetObservable,AbortSet)
      AccountBalance
   end
   properties (Transient)
      AccountManagerListener
   end
   properties
      AccountStatus
   end
   methods
      function obj = BankAccount(initialBalance)
         obj.AccountBalance = initialBalance;
         obj.AccountStatus = "New Account";
         obj.AccountManagerListener = addlistener(obj,...
            "AccountBalance","PostSet",@(src,evt)assignStatus(obj));
      end
      function assignStatus(obj,~)
         if obj.AccountBalance < 0
             obj.AccountStatus = "Overdrawn";
         else
            obj.AccountStatus = "Open";
         end
      end
   end
end

BankAccount의 인스턴스를 만듭니다.

x = BankAccount(100)
x = 

  BankAccount with properties:

            AccountBalance: 100
    AccountManagerListener: [1×1 event.proplistener]
             AccountStatus: "New Account"

AccountBalance 속성을 음수 값으로 설정하고 AccountStatus의 변경 사항을 확인합니다.

x.AccountBalance = -100
x = 

  BankAccount with properties:

            AccountBalance: -100
    AccountManagerListener: [1×1 event.proplistener]
             AccountStatus: "Overdrawn"

save를 호출하여 x를 직렬화하는 경우 AccountManagerListener는 직렬화되지 않습니다. load를 호출할 때 이벤트 리스너를 복원하려면, 리스너를 다시 만들어 AccountManagerListener에 할당하는 loadobj 메서드를 BankAccount에 대해 정의합니다.

methods (Static)
   function obj = loadobj(obj)
      if isstruct(obj)
         initialBalance = obj.AccountBalance;
         obj = BankAccount(initialBalance);
      else
         obj.AccountManagerListener = addlistener(obj,...
         "AccountBalance","PostSet",@(src,evt)assignStatus(obj));
      end
   end
end

x를 저장한 다음 지웁니다. x를 불러와 loadobj가 이벤트 리스너를 다시 만들었는지 확인합니다.

save("C:\yourpath\AccountTest.mat","x")
clear x
load("C:\yourpath\AccountTest.mat","x")
x
x = 

  BankAccount with properties:

            AccountBalance: -100
    AccountManagerListener: [1×1 event.proplistener]
             AccountStatus: "Overdrawn"

입력 인수

모두 축소

MAT 파일에서 역직렬화할 콘텐츠로, 다음과 같습니다.

  • 객체

  • load가 객체를 확인할 수 없는 경우 load에서 생성된 구조체

  • 대응하는 saveobj 메서드가 만든 구조체

출력 인수

모두 축소

MATLAB®에서 load 함수에 전달한 객체. 클래스 loadobj 메서드에서 반환되는 값은 일반적으로 현재 불러오고 있는 클래스의 객체입니다. 그러나, loadobj 메서드는 다른 클래스의 객체를 반환하거나 새 클래스 정의와 일치하는 업데이트된 객체를 반환할 수 있습니다.

  • loadobj를 정적 메서드로 정의합니다.

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

  • 새 버전의 클래스가 속성을 제거하거나 속성의 이름을 바꾸거나 속성의 유효성을 변경하는 경우 변경되거나 삭제된 속성을 설정하려고 하면 load가 오류를 생성할 수 있습니다. 클래스가 loadobj 메서드를 정의하는 경우 MATLAB이 저장된 값을 structloadobj 메서드로 반환합니다. 저장된 객체가 동일한 이름의 프라이빗 속성을 갖는 여러 슈퍼클래스에서 파생되는 경우 struct는 가장 직속 슈퍼클래스의 속성값만 포함합니다.

  • 서브클래스 객체를 불러올 때 load는 서브클래스 loadobj 메서드만 호출합니다. 슈퍼클래스가 loadobj 메서드를 정의하는 경우 서브클래스는 이 메서드를 상속합니다. 그러나 상속된 메서드가 서브클래스 객체를 불러오는 데 필요한 작업을 수행하지 않을 수 있습니다. 애플리케이션에 필요한 경우 슈퍼클래스 loadobj 메서드를 재정의해 보십시오. 또한 서브클래스 loadobj에서 슈퍼클래스 loadobj를 호출할 수도 있습니다.

버전 내역

R2006a 이전에 개발됨