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

속성 액세스 메서드

속성을 사용하여 클래스 데이터에 액세스

MATLAB®에서는 속성이 퍼블릭 액세스를 가질 수 있습니다. 따라서, 사용자에게 노출되도록 설계된 클래스의 경우 속성을 통해 데이터에 액세스할 수 있습니다.

속성 액세스 메서드를 사용하여 오류 검사를 제공하거나 속성 액세스로 인해 발생하는 부수적 효과를 구현할 수 있습니다. 액세스 메서드의 예로는 속성을 설정할 때 다른 속성값을 업데이트하는 함수 또는 값을 반환하기 전에 속성값의 형식을 변환하는 함수를 들 수 있습니다.

속성 유효성 검사를 사용하여 속성값의 크기, 클래스 및 다른 특성을 제한할 수 있습니다. 속성 유효성 검사에 대한 내용은 속성값 유효성 검사 항목을 참조하십시오.

액세스 메서드를 사용하는 경우 성능 고려 사항

속성 액세스 메서드의 경우 속성값에 액세스할 때마다 함수 호출로 인해 오버헤드가 생깁니다. 클래스 메서드 내부에서 속성에 신속하게 액세스해야 하는 경우 프라이빗 속성을 정의하여 값을 저장하십시오. 그리고 해당 값을 오류 검사가 없는 메서드 내부에서 사용하십시오. 더 적은 빈도로 클래스 외부에서 발생하는 액세스의 경우에는 오류 검사에 액세스 메서드를 사용하는 Dependent 퍼블릭 속성을 정의하십시오.

Dependent 속성에 사용되는 액세스 메서드에 대한 자세한 내용은 종속 속성에 대한 set 메서드 및 get 메서드 항목을 참조하십시오.

속성 set 메서드와 속성 get 메서드

속성 액세스 메서드는 속성값이 쿼리되거나 할당될 때마다 특정 코드를 실행합니다. 이 메서드를 통해 다양한 작업을 수행할 수 있습니다.

  • 속성값을 할당하기 전에 코드를 실행하여 다음과 같은 작업을 수행합니다.

  • 속성의 현재 값을 반환하기 전에 코드를 실행하여 다음과 같은 작업을 수행합니다.

속성에 액세스할 수 있는 코드를 제어하려면 속성 특성(Attribute) 항목을 참조하십시오.

MATLAB에서 액세스 메서드 호출

참고

속성 액세스 메서드를 직접 호출할 수는 없습니다. 이 메서드는 사용자가 속성값에 액세스할 때 MATLAB에 의해 호출됩니다.

속성 액세스 메서드는 사용자가 액세스 메서드 외부에서 해당 속성값을 설정하거나 쿼리할 때마다 자동으로 실행됩니다. MATLAB은 액세스 메서드를 재귀적으로 호출하지 않습니다. 즉, MATLAB은 자체 set 메서드에서 속성을 설정할 때는 set 메서드를 호출하지 않습니다. 마찬가지로, MATLAB은 자체 get 메서드에서 속성값을 쿼리할 때 get 메서드를 호출하지 않습니다.

set 및 get 액세스 메서드에 대한 함수 핸들은 속성의 meta.property 객체에서 가져옵니다. meta.propertySetMethod 속성 및 GetMethod 속성에 이들 메서드를 참조하는 함수 핸들이 포함되어 있습니다.

액세스 메서드에 대한 제한 사항

다음에 한해서만 속성 액세스 메서드를 정의합니다.

  • 구체 속성(즉, 추상이 아닌 속성)에 대해서만 정의합니다.

  • 해당 속성을 정의한 클래스 내에서만 정의합니다(단, 그 클래스 내에서 속성이 추상 속성이 아니어야 함. 추상 속성인 경우에는 구체 서브클래스가 액세스 메서드를 정의해야 함).

MATLAB에는 디폴트로 지정되어 있는 set 또는 get 속성 액세스 메서드가 없습니다. 따라서 사용자가 속성 액세스 메서드를 정의하지 않으면 MATLAB은 속성값을 할당하거나 반환하기 전에 어떠한 메서드도 호출하지 않습니다.

메서드가 정의된 후에는 오직 set 메서드와 get 메서드만 실제 속성값을 설정하고 쿼리할 수 있습니다. MATLAB이 속성 set 메서드를 호출하지 않는 경우에 대한 자세한 내용은 set 메서드가 호출되는 경우 항목을 참조하십시오.

참고

속성에 대한 set 액세스 메서드 및 get 액세스 메서드는 클래스의 인스턴스에서 속성값을 설정하고 쿼리하기 위해 사용자가 호출할 수 있는 set 메서드 및 get 메서드와 동일하지 않습니다. 사용자가 호출할 수 있는 set 메서드 및 get 메서드에 대한 자세한 내용은 속성에 대한 set/get 인터페이스 구현하기 항목을 참조하십시오.

액세스 메서드는 함수를 호출하여 속성에 액세스할 수 없음

속성값을 설정하고 가져오는 것은 해당 속성에 대한 set 액세스 메서드 또는 get 액세스 메서드 내에서만 할 수 있습니다. set 메서드 또는 get 메서드에서 다른 함수를 호출하여 해당 함수에서 속성값에 액세스할 수는 없습니다.

예를 들어, 실제 작업을 수행하기 위해 다른 함수를 호출하는 익명 함수는 속성값에 액세스할 수 없습니다. 마찬가지로, 액세스 함수는 속성값에 액세스하기 위해 다른 함수를 호출할 수 없습니다.

액세스 메서드 정의하기

액세스 메서드는 속성 이름을 포함하는 특수한 이름을 가집니다. 따라서, get.PropertyNamePropertyName이 참조될 때마다 실행되고 set.PropertyNamePropertyName에 값이 할당될 때마다 실행됩니다.

속성 액세스 메서드는 특성을 지정하지 않는 methods 블록에 정의합니다. 이러한 메서드는 직접 호출할 수 없습니다. 코드가 속성에 액세스할 때 MATLAB이 이러한 메서드를 호출합니다.

속성 액세스 메서드는 methods 명령으로 반환되는 클래스 메서드의 목록에 나타나지 않으며 meta.class 객체의 Methods 속성에 포함되지 않습니다.

액세스 메서드 함수 핸들

속성 meta.property 객체는 속성 set 메서드 및 속성 get 메서드에 대한 함수 핸들을 포함합니다. SetMethod는 set 메서드에 대한 함수 핸들을 포함합니다. GetMethod는 get 메서드에 대한 함수 핸들을 포함합니다.

이러한 핸들은 meta.property 객체에서 가져옵니다.

mc = ?ClassName;
mp = findobj(mc.PropertyList,'Name','PropertyName');
fh = mp.GetMethod;

예를 들어, MyClass 클래스가 Text 속성에 대한 get 메서드를 정의하고 있다면 meta.class 객체로부터 이 함수의 함수 핸들을 가져올 수 있습니다.

mc = ?MyClass;
mp = findobj(mc.PropertyList,'Name','Text');
fh = mp.GetMethod;

반환된 값인 fh에 지정된 클래스의 지정된 속성 이름에 대해 정의된 get 메서드의 함수 핸들이 포함되어 있습니다.

함수 핸들을 정의하는 방법에 대한 자세한 내용은 함수 핸들 생성하기 항목을 참조하십시오.

set/get 메서드의 실행 및 속성 이벤트

MATLAB은 set 연산과 get 연산을 수행하기 전과 수행한 후에 이벤트를 생성합니다. 이러한 이벤트를 사용하여 속성값이 참조되었거나 할당되었음을 리스너에 알릴 수 있습니다. 이벤트가 생성되는 시점은 다음과 같습니다.

  • PreGet — 속성 get 메서드를 호출하기 전에 트리거됨

  • PostGet — 속성 get 메서드가 해당 값을 반환한 후 트리거됨

클래스가 속성값을 계산하는 경우(Dependent = true), 해당 set 이벤트의 동작은 get 이벤트와 유사합니다.

  • PreSet — 속성 set 메서드를 호출하기 전에 트리거됨

  • PostSet — 속성 set 메서드를 호출한 후 트리거됨

속성이 계산되지 않는 경우(Dependent = false, 디폴트 값임), set 메서드를 사용하는 대입문은 다음과 같이 이벤트를 생성합니다.

  • PreSet — set 메서드 내에 새로운 속성값을 할당하기 전에 트리거됨

  • PostSet — set 메서드 내에 새로운 속성값을 할당한 후 트리거됨

속성 이벤트를 사용하는 방법에 대한 자세한 내용은 속성 리스너 생성하기 항목을 참조하십시오.

액세스 메서드와 배열을 포함하는 속성

배열을 포함하는 속성의 경우, 속성 set 메서드 및 속성 get 메서드에 영향을 미치지 않으면서 속성에 배열 인덱싱을 사용할 수 있습니다.

인덱스 참조의 경우:

val = obj.PropName(n);

MATLAB이 get 메서드를 호출하여 참조된 값을 가져옵니다.

인덱스 참조 값 할당의 경우:

obj.PropName(n) = val;

MATLAB은 다음 작업을 수행합니다.

  • get 메서드를 호출하여 속성값을 가져옵니다.

  • 반환된 속성에 대한 인덱스 참조 값 할당을 수행합니다.

  • 새 속성값을 set 메서드에 전달합니다.

액세스 메서드와 객체로 구성된 배열

객체 배열에 대해 참조 또는 값 할당이 수행된 경우 MATLAB은 루프에서 set 메서드 및 get 메서드를 호출합니다. 이 루프에서 MATLAB은 항상 스칼라 객체를 set 메서드 및 get 메서드에 전달합니다.

액세스 메서드를 사용하여 속성값 수정하기

속성값을 할당하거나 반환하기 전에 일부 추가 단계를 수행하려는 경우 속성 액세스 메서드가 유용할 수 있습니다. 예를 들어, Testpoint 클래스는 속성 set 메서드를 사용하여 값의 범위를 검사합니다. 그런 다음, 값이 특정 범위 내에 있는 경우 스케일링을 적용하고, 특정 범위 내에 있지 않을 경우 NaN으로 설정합니다.

속성 get 메서드는 현재 값을 반환하기 전에 스케일링 인자를 적용합니다.

classdef Testpoint
   properties
      expectedResult = []
   end
   properties(Constant)
      scalingFactor = 0.001
   end
   methods
      function obj = set.expectedResult(obj,erIn)
         if erIn >= 0 && erIn <= 100
            erIn = erIn.*obj.scalingFactor;
            obj.expectedResult = erIn;
         else
            obj.expectedResult = NaN;
         end
      end
      function er = get.expectedResult(obj)
         er = obj.expectedResult/obj.scalingFactor;
      end
   end
end

관련 항목