주요 콘텐츠

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

loadobj

R2026a

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

설명

참고

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 이전에 개발됨