정적 데이터
정적 데이터란?
정적 데이터는 클래스의 모든 객체가 공유하고 사용자가 생성 후 수정할 수 있는 데이터를 말합니다. 정적 데이터를 사용하여 클래스 인스턴스에서 사용되거나 클래스의 모든 객체에서 공유되는 다른 데이터에서 사용되는 카운터를 정의할 수 있습니다. 인스턴스 데이터와 다르게 정적 데이터는 객체 간에 달라지지 않습니다. 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 필드와 같은 상수 속성을 사용하십시오.