이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

속성에 대한 set/get 인터페이스 구현하기

표준 set/get 인터페이스

그래픽스 객체와 같은 일부 MATLAB® 객체는 set 함수와 get 함수를 기반으로 하여 인터페이스를 구현합니다. 이러한 함수를 통해 단일 함수 호출에서 객체로 구성된 배열에 대한 여러 속성에 액세스할 수 있습니다.

다음 클래스 중 하나에서 파생하여 set 기능과 get 기능을 클래스에 추가할 수 있습니다.

  • matlab.mixin.SetGet — 대/소문자를 구분하지 않는 부분 속성 이름 일치를 지원하려는 경우 사용합니다. matlab.mixin.SetGet에서 파생해도 속성에 대한 점 표기법 참조를 사용하는 데 필요한 정확한 속성 이름에는 영향을 미치지 않습니다.

  • matlab.mixin.SetGetExactNames — 대/소문자를 구분하는 전체 속성 이름 일치만 지원하려는 경우 사용합니다.

참고

이 섹션에서 언급하는 set 메서드 및 get 메서드는 속성 set 액세스 메서드 및 get 액세스 메서드와 다릅니다. 속성 액세스 메서드에 대한 자세한 내용은 속성 액세스 메서드 항목을 참조하십시오.

서브클래스 구문

추상 클래스인 matlab.mixin.SetGet 또는 matlab.mixin.SetGetExactNames를 슈퍼클래스로 사용합니다.

classdef MyClass < matlab.mixin.SetGet
   ...
end

matlab.mixin.SetGetmatlab.mixin.SetGetExactNameshandle 클래스에서 파생되기 때문에 사용자의 서브클래스도 handle 클래스입니다.

get 메서드 구문

get 메서드는 객체 핸들과 속성 이름을 사용하여 객체 속성의 값을 반환합니다. 예를 들어, H가 객체 하나에 대한 핸들이라고 가정하겠습니다.

v = get(H,'PropertyName');

단일 속성 이름을 사용하여 핸들로 구성된 배열을 지정하면 get이 값으로 구성된 셀형 배열로 각 객체에 대한 속성값을 반환합니다.

CV = get(H,'PropertyName');

CV 배열은 H의 형태에 관계없이 항상 열입니다.

char형 벡터 속성 이름으로 구성된 셀형 배열과 핸들로 구성된 배열을 지정하면 get이 속성값으로 구성된 셀형 배열을 반환합니다. 셀에 포함된 각 행은 핸들 배열에 포함된 객체에 대응됩니다. 셀에 포함된 각 열은 속성 이름에 대응됩니다.

props = {'PropertyName1','PropertyName2'};
CV = get(H,props);

get은 mxn 셀형 배열을 반환하며, 여기서 m = length(H)이고 n = length(props)입니다.

핸들 배열을 지정하되 속성 이름을 지정하지 않으면 get은 배열에 포함된 각 구조체가 H에 포함된 객체에 대응되는 struct형의 배열을 반환합니다. 각 구조체에 포함된 각 필드는 H의 클래스로 정의된 속성에 대응됩니다. 각 필드의 값은 대응되는 속성의 값입니다.

SV = get(H);

출력 변수를 할당하지 않은 경우 H는 스칼라여야 합니다.

예제는 핸들로 구성된 배열과 함께 get 사용하기 항목을 참조하십시오.

set 메서드 구문

set 메서드는 핸들 H를 갖는 객체에 대해, 지정된 속성에 지정된 값을 할당합니다. H가 핸들로 구성된 배열이면 MATLAB이 배열 H에 포함된 각 객체에 대한 속성에 값을 할당합니다.

set(H,'PropertyName',PropertyValue)

속성 이름으로 구성된 셀형 배열과 속성값으로 구성된 셀형 배열을 set에 전달할 수 있습니다.

props = {'PropertyName1','PropertyName2'};
vals = {Property1Value,Property2Value};
set(H,props,vals)

length(H)가 1보다 크면 속성값 셀형 배열(vals)에는 각 객체에 포함된 각 속성의 값이 들어갑니다. 예를 들어 length(H)가 2, 즉 객체 핸들이 2개라고 가정하겠습니다. 각 객체에 대해 두 개의 속성값을 할당하려는 경우 다음과 같이 하십시오.

props = {'PropertyName1','PropertyName2'};
vals = {Property11Value,Property12Value;Property21Value,Property22Value};
set(H,props,vals))

위의 명령문은 다음 두 명령문과 동일합니다.

set(H(1),'PropertyName1',Property11Value,'PropertyName2',Property12Value)
set(H(2),'PropertyName1',Property21Value,'PropertyName2',Property22Value)

속성 이름이 아니라 스칼라 핸들을 지정하는 경우 setH의 클래스에 포함된 각 속성에 대해 한 개의 필드를 갖는 struct를 반환합니다. 각 필드는 빈 셀형 배열을 포함합니다.

SV = set(h);

matlab.mixin.SetGet에서 파생된 클래스

이 예제 클래스는 set/get 인터페이스를 정의하고 상속된 메서드의 동작을 보여줍니다.

classdef LineType < matlab.mixin.SetGet
   properties
      Style = '-'
      Marker = 'o'
   end
   properties (SetAccess = protected)
      Units = 'points'
   end
   methods
      function obj = LineType(s,m)
         if nargin > 0
            obj.Style = s;
            obj.Marker = m;
         end
      end
      function obj = set.Style(obj,val)
         if ~(strcmpi(val,'-') ||...
               strcmpi(val,'--') ||...
               strcmpi(val,'..'))
            error('Invalid line style ')
         end
         obj.Style = val;
      end
      function obj = set.Marker(obj,val)
         if ~isstrprop(val,'graphic')
            error('Marker must be a visible character')
         end
         obj.Marker = val;
      end
   end
end

클래스의 인스턴스를 생성하고 그 핸들을 저장합니다.

h = LineType('--','*');

상속된 get 메서드를 사용하여 객체 속성의 값을 쿼리합니다.

get(h,'Marker')
ans =

*

상속된 set 메서드를 사용하여 속성의 값을 설정합니다.

set(h,'Marker','Q')

set 및 get으로 호출되는 속성 액세스 메서드

set 메서드 및 get 메서드를 사용하면 MATLAB이 속성 액세스 메서드(LineType 클래스의 set.Style 또는 set.Marker)를 호출합니다.

set(h,'Style','-.-')
Error using LineType>LineType.set.Style
Invalid line style

속성 액세스 메서드에 대한 자세한 내용은 속성 액세스 메서드 항목을 참조하십시오.

모든 속성 나열하기

get을 사용하여 객체 속성과 이 객체 속성의 현재 값을 포함하는 struct를 반환할 수 있습니다.

h = LineType('--','*');
SV = get(h)
SV =

     Style: '--'
    Marker: '*'
     Units: 'points'

set을 사용하여 public SetAccess를 갖는 속성을 포함하는 struct를 반환할 수 있습니다.

S = set(h)
S =

     Style: {}
    Marker: {}

LineType 클래스는 SetAccess = protectedUnits 속성을 정의합니다. 따라서 S = set(h)SUnits에 대한 필드를 생성하지 않습니다.

set은 퍼블릭이 아닌 set 액세스를 갖는 속성에 대해서는 값을 반환할 수 없습니다.

핸들로 구성된 배열과 함께 get 사용하기

LineType 객체로 구성된 배열을 생성한다고 가정하겠습니다.

H = [LineType('..','z'),LineType('--','q')]
H = 

  1x2 LineType with properties:

    Style
    Marker
    Units

H가 핸들로 구성된 배열이면 get이 속성값으로 구성된 (length(H)x1) 셀형 배열을 반환합니다.

CV = get(H,'Style')
CV = 

    '..'
    '--'

H가 핸들로 구성된 배열인 경우 속성 이름을 지정하지 않으면 get이 속성 이름에 대응하는 이름을 갖는 필드를 포함하는 struct 배열을 반환합니다. H가 스칼라가 아닌 경우 get의 출력값을 변수에 할당합니다.

SV = get(H)
SV = 

2x1 struct array with fields:
    Style
    Marker
    Units

구조체로 구성된 SV 배열의 두 번째 배열 요소에서 Marker 속성의 값을 가져옵니다.

SV(2).Marker
ans =

q

핸들, 이름, 값으로 구성된 배열

핸들로 구성된 배열, 속성 이름으로 구성된 셀형 배열, 속성값으로 구성된 셀형 배열을 set에 전달할 수 있습니다. 속성값 셀형 배열에는 H에 포함된 각 객체에 대한 속성값으로 구성된 하나의 행이 있어야 합니다. 각 행에는 속성 이름 배열에 포함된 각 속성에 대한 하나의 값이 있어야 합니다.

H = [LineType('..','z'),LineType('--','q')];
set(H,{'Style','Marker'},{'..','o';'--','x'})

set에 대한 이 호출의 결과는 다음과 같습니다.

H(1)
ans = 

  LineType with properties:

     Style: '..'
    Marker: 'o'
     Units: 'points
H(2)
ans = 

  LineType with properties:

     Style: '--'
    Marker: 'x'
     Units: 'points'

속성 목록 사용자 지정하기

서브클래스에서 다음 메서드를 다시 정의하여 속성 목록이 표시되는 방법을 사용자 지정할 수 있습니다.

  • setdisp — 출력 인수는 사용하지 않고 하나의 스칼라 핸들 입력값을 사용하여 set을 호출하면 setsetdisp를 호출하여 속성 목록을 표시할 방법을 확인합니다.

  • getdisp — 출력 인수는 사용하지 않고 하나의 스칼라 핸들 입력값을 사용하여 get을 호출하면 getgetdisp를 호출하여 속성 목록을 표시할 방법을 확인합니다.

참고 항목

|

관련 항목