Main Content

정적 데이터

정적 데이터란?

정적 데이터는 클래스의 모든 객체가 공유하고 사용자가 생성 후 수정할 수 있는 데이터를 말합니다. 정적 데이터를 사용하여 클래스 인스턴스에서 사용되거나 클래스의 모든 객체에서 공유되는 다른 데이터에서 사용되는 카운터를 정의할 수 있습니다. 인스턴스 데이터와 다르게 정적 데이터는 객체 간에 달라지지 않습니다. MATLAB®은 요구 사항에 따라 정적 데이터를 정의할 수 있는 여러 가지 방법을 제공합니다.

정적 변수

클래스는 영속 변수를 사용하여 정적 데이터를 저장할 수 있습니다. 영속 변수를 생성하는 정적 메서드 또는 로컬 함수를 정의해 보십시오. 메서드나 함수는 이 변수에 대한 액세스를 제공합니다. 하나 또는 두 개의 변수를 저장하려면 이 기법을 사용하십시오.

영속 변수를 정의하는 클래스의 객체를 저장해도 이 클래스와 연결된 정적 데이터는 저장되지 않습니다. 객체에 정적 데이터를 저장하거나 더 광범위한 데이터를 정의하려면 정적 데이터 객체 기법(정적 데이터 객체)을 사용하십시오.

구현

StoreData 클래스는 영속 변수 Var을 선언하는 정적 메서드를 정의합니다. setgetVar 메서드는 영속 변수의 데이터에 대한 set 액세스 및 get 액세스를 제공합니다. setgetVar 메서드가 퍼블릭 액세스를 가지기 때문에 영속 변수에 저장된 데이터를 전역적으로 설정하고 가져올 수 있습니다. 메서드의 Access 특성을 설정하여 액세스 범위를 제어합니다.

classdef StoreData
   methods (Static)
      function out = setgetVar(data)
         persistent Var;
         if nargin
            Var = data;
         end
         out = Var;
      end
   end
end

입력 인수를 사용해 setgetVar을 호출하여 변수의 값을 설정합니다. 이 메서드는 입력값을 영속 변수에 할당합니다.

StoreData.setgetVar(10);

입력 인수 없이 setgetVar을 호출하여 변수의 값을 가져옵니다.

a = StoreData.setgetVar
a =     10

StoreData 클래스에 대해 clear를 호출하여 영속 변수를 지웁니다.

clear StoreData
a = StoreData.setgetVar
a =

     []

어떤 클래스가 정적 속성처럼 동작하도록 하게 하려면, 클래스에 setgetVar과 같은 메서드를 추가할 수 있습니다.

정적 데이터 객체

더 광범위한 데이터를 저장하려면 퍼블릭 속성으로 핸들 클래스를 정의하십시오. 그리고 이 클래스의 객체를 정적 데이터를 사용하는 클래스의 상수 속성에 할당합니다. 이 기법은 다음을 수행하려는 경우 유용합니다.

  • 데이터를 수정하는 속성 또는 메서드를 더 추가합니다.

  • 데이터 클래스의 객체를 저장하고 정적 데이터를 다시 불러옵니다.

구현

SharedData 클래스는 핸들 클래스이므로, 이를 사용하여 여러 핸들 변수에서 동일한 객체 데이터를 참조할 수 있습니다.

classdef SharedData < handle
   properties 
      Data1
      Data2
   end
end

UseData 클래스는 SharedData 클래스에 저장된 데이터를 사용하는 클래스의 스텁입니다. UseData 클래스는 SharedData 객체에 대한 핸들을 상수 속성에 저장합니다.

classdef UseData
   properties (Constant)
      Data = SharedData
   end
   % Class code here
end

Data 속성에는 SharedData 객체의 핸들을 포함합니다. UseData 클래스를 불러오면 MATLAB이 SharedData 객체를 생성합니다. UseData 클래스에 대해 이후에 생성되는 모든 인스턴스는 동일한 SharedData 객체를 참조합니다.

SharedData 객체 속성을 초기화하려면 상수 속성을 참조하여 UseData 클래스를 불러오십시오.

h = UseData.Data
h = 

  SharedData with properties:

    Data1: []
    Data2: []

SharedData 객체에 대한 핸들을 사용하여 속성값에 데이터를 할당합니다.

h.Data1 = 'MyData1';
h.Data2 = 'MyData2';

UseData 클래스의 각 인스턴스는 동일한 핸들 객체를 참조합니다.

a1 = UseData;
a2 = UseData;

객체 변수를 사용하여 데이터를 참조합니다.

a1.Data.Data1
ans =

MyData1

SharedData 객체의 속성에 새 값을 할당합니다.

a1.Data.Data1 = rand(3);

UseData 클래스에 대한 모든 새 객체와 기존 객체는 동일한 SharedData 객체를 공유합니다. a2는 이제 이전 단계에서 a1에 할당된 rand(3) 데이터를 갖습니다.

a2.Data.Data1
ans =

    0.8147    0.9134    0.2785
    0.9058    0.6324    0.5469
    0.1270    0.0975    0.9575

상수 속성을 다시 초기화하려면 UseData 클래스의 모든 인스턴스를 지운 후 클래스를 지우십시오.

clear a1 a2
clear UseData

상수 데이터

변경되지 않는 상수 값을 저장하려면 데이터를 상수 속성에 할당하십시오. 클래스의 모든 인스턴스는 이 상수 속성에 대해 동일한 값을 공유합니다. 속성의 Access 특성을 설정하여 상수 속성에 대한 액세스 범위를 제어합니다.

상수 속성의 값을 변경하는 유일한 방법은 클래스 정의를 변경하는 것입니다. Java®의 public final static 필드와 같은 상수 속성을 사용하십시오.

참고 항목

|

관련 예제

세부 정보