Main Content

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

속성 유효성 검사 함수

함수를 사용하여 속성 유효성 검사하기

클래스 정의에 속성 유효성 검사 함수를 사용하여 속성값에 대한 특정 제한을 적용할 수 있습니다. 유효성 검사 함수는 잠재적인 속성값을 인수로 받고 값이 함수가 적용하는 특정 요구 사항을 충족하지 않을 경우 오류를 발생시킵니다.

유효성 검사 프로세스 동안 MATLAB®은 클래스 정의에 나열된 각각의 유효성 검사 함수에 값을 전달합니다. MATLAB은 왼쪽부터 오른쪽으로 각 함수를 호출하고 첫 번째로 만나는 오류를 발생시킵니다. 유효성 검사 함수에 전달되는 값은 클래스 및 크기 사양에 의해 적용되는 변환의 결과입니다. 클래스 및 크기 유효성 검사에 대한 자세한 내용은 Property Class and Size Validation 항목을 참조하십시오.

MATLAB 유효성 검사 함수 목록은 MATLAB 유효성 검사 함수 항목을 참조하십시오.

유효성 검사 함수 구문

유효성 검사 함수를 인수까지 포함한 함수 이름 또는 함수 호출의 목록으로 쉼표로 구분해 나열하고, 이를 중괄호로 묶어 지정하십시오.

classdef MyClass
   properties
      Prop {fcn1,fcn2,...} = defaultValue
   end
end

MATLAB은 잠재적인 속성값을 유효성 검사 함수에 묵시적으로 전달합니다. 하지만 유효성 검사 함수에 잠재적인 속성값과 함께 입력 인수가 필요한 경우 속성과 추가 인수를 모두 포함시켜야 합니다. 추가 인수는 리터럴 값이어야 하고 변수를 참조할 수 없습니다. 리터럴 값은 숫자 및 텍스트와 같은 비기호적 표현입니다.

예를 들어, 함수 mustBeGreaterThan을 살펴보겠습니다. 이 함수에는 입력 파라미터로 제한 값이 필요합니다. 이 유효성 검사 함수는 속성값이 이 제한 값보다 클 것을 요구합니다.

속성을 첫 번째 인수로 전달합니다. 속성 이름을 사용하되, 이름을 따옴표로 묶지 마십시오. 이 속성 정의는 Prop10보다 큰 값으로 제한합니다.

properties
   Prop {mustBeGreaterThan(Prop,10)}
end

유효성 검사 함수 사용하기

다음 클래스는 각 속성에 대해 유효성 검사 함수를 지정합니다.

  • Data는 숫자형이고 유한해야 합니다.

  • Interp는 나열된 세 개 옵션 중 하나여야 합니다. 이 요구 사항을 충족하도록 이 속성에 대한 디폴트 값을 지정하십시오.

classdef ValidatorFunction
   properties
      Data {mustBeNumeric, mustBeFinite}
      Interp {mustBeMember(Interp,{'linear','cubic','spline'})} = 'linear'
   end
end

클래스의 디폴트 객체를 생성하면 초기값이 표시됩니다.

a = ValidatorFunction
a = 

  ValidatorFunction with properties:

      Data: []
    Interp: 'linear'

값을 속성에 할당하면 유효성 검사 함수가 호출됩니다.

a.Data = 'cubic'
Error setting property 'Data' of class 'ValidatorFunction':
Value must be numeric.

Data 속성 유효성 검사에는 숫자형 클래스가 포함되지 않으므로 char형 벡터가 숫자형 값으로 변환되지 않습니다. 클래스를 double형으로 지정하기 위해 Data 속성에 대한 유효성 검사를 변경하면 MATLAB이 char형 벡터를 double형 배열로 변환합니다.

properties
   Data double {mustBeNumeric, mustBeFinite}
end

MATLAB이 char형 벡터를 double형 클래스로 변환하기 때문에 char형 벡터에 값을 할당해도 오류가 발생하지 않습니다.

a.Data = 'cubic'
a = 

  ValidatorFunction with properties:

      Data: [99 117 98 105 99]
    Interp: 'linear'

Interp 속성에 값을 할당하려면 값이 정확히 일치해야 합니다.

a = ValidatorFunction;
a.Interp = 'cu'
Error setting property 'Interp' of class 'ValidatorFunction':
Value must be a member of this set
    linear
    cubic
    spline

열거형 클래스를 사용하면 부정확한 일치가 가능하고 대/소문자가 구분되지 않습니다.

부정확한 일치를 위한 열거형 클래스

열거형 클래스를 사용하여 속성 유효성 검사를 수행하면 다음과 같은 이점이 있습니다.

  • 모호하지 않은 char형 벡터나 string형 스칼라에 대해 부정확하고 대/소문자를 구분하지 않는 일치 가능

  • 부정확하게 일치하는 항목을 올바른 값으로 변환 가능

예를 들어, Interp 속성 유효성 검사를 위해 InterpMethod 열거형 클래스를 정의한다고 가정하겠습니다.

classdef InterpMethod
   enumeration
      linear
      cubic
      spline
   end
end

InterpMethod 클래스를 사용하도록 Interp 속성 유효성 검사를 변경합니다.

classdef ValidatorFunction
   properties
      Data {mustBeNumeric, mustBeFinite}
      Interp InterpMethod
   end
end

'cubic'의 처음 몇 글자와 일치하는 값을 할당합니다.

a = ValidatorFunction;
a.Interp = 'cu'
a = 

  ValidatorFunction with properties:

      Data: []
    Interp: cubic

MATLAB 유효성 검사 함수

MATLAB은 속성 유효성 검사에 사용할 함수를 정의합니다. 이들 함수는 유효성 검사에 일반적으로 사용되는 패턴을 지원하며 설명이 포함된 오류 메시지를 제공합니다. 다음 표에는 MATLAB 유효성 검사 함수와 각 함수의 의미, 그리고 유효성 검사 함수가 사용하는 MATLAB 함수가 나와 있습니다.

이름

의미

입력값에 대해 호출되는 함수

mustBePositive(value)

value > 0

gt, isreal, isnumeric, islogical

mustBeNonpositive(value)

value <= 0

ge, isreal, isnumeric, islogical

mustBeFinite(value)

valueNaN 요소와 Inf 요소가 없습니다.

isfinite

mustBeNonNan(value)

valueNaN 요소가 없습니다.

isnan

mustBeNonnegative(value)

value >= 0

ge, isreal, isnumeric, islogical

mustBeNegative(value)

value < 0

lt, isreal, isnumeric, islogical

mustBeNonzero(value)

value ~= 0

eq, isnumeric, islogical

mustBeGreaterThan(value,c)

value > c

gt, isscalar, isreal, isnumeric, islogical

mustBeLessThan(value,c)

value < c

lt, isreal, isnumeric, islogical

mustBeGreaterThanOrEqual(value,c)

value >= c

ge, isreal, isnumeric, islogical

mustBeLessThanOrEqual(value,c)

value <= c

le, isreal, isnumeric, islogical

mustBeNonempty(value)

value가 비어 있지 않습니다.

isempty

mustBeNonsparse(value)

value에 희소 요소가 없습니다.

issparse

mustBeNumeric(value)

value가 숫자형입니다.

isnumeric

mustBeNumericOrLogical(value)

value가 숫자형이거나 논리형입니다.

isnumeric, islogical

mustBeReal(value)

value에 허수부가 없습니다.

isreal

mustBeInteger(value)

value == floor(value)

isreal, isfinite, floor, isnumeric, islogical

mustBeMember(value,S)

valueS의 구성원과 정확히 일치합니다.

ismember

유효성 검사 함수 정의하기

유효성 검사기 함수는 속성값의 유효성을 검사하는 특정 용도로 설계된 일반 MATLAB 함수입니다. 속성 유효성 검사기로 사용되는 함수는 다음과 같이 동작합니다.

  • 잠재적인 속성값을 입력 인수로 받습니다.

  • 값을 반환하지 않습니다.

  • 유효성 검사에 실패하면 오류를 발생시킵니다.

MATLAB 유효성 검사 함수로는 수행할 수 없는 특정한 유효성 검사를 제공하고 싶다면 유효성 검사 함수를 직접 생성하는 것이 좋습니다. 클래스 파일 내에 로컬 함수를 생성하거나 MATLAB 경로에 함수를 배치하여 어떠한 클래스에서도 사용 가능하게 만들 수 있습니다.

예를 들어, ImData 클래스는 로컬 함수를 사용하여 Data 속성을 특정 범위의 숫자형 값으로 제한하는 유효성 검사기를 정의합니다.

classdef ImData
   properties
      Data {mustBeNumeric, mustBeInRange(Data,[0,255])} = 0
   end
end
function mustBeInRange(a,b)
   if any(a(:) < b(1)) || any(a(:) > b(2))
      error(['Value assigned to Data property is not in range ',...
         num2str(b(1)),'...',num2str(b(2))])
   end
end

ImData 클래스의 인스턴스를 생성하면 MATLAB이 디폴트 값이 범위 0...255에 속하고 비어 있지 않은 숫자형인지 검사합니다.

a = ImData
a = 

  ImData with properties:

    Data: 0

속성에 값을 할당하면 왼쪽에서 오른쪽 순으로 유효성 검사기가 호출됩니다. char형 벡터를 Data 속성에 할당하면 mustBeNumeric에서 오류를 발생시킵니다.

a.Data = 'red'
Error setting property 'Data' of class 'ImData':
Value must be numeric.

범위를 벗어나는 숫자형 값을 할당하면 mustBeInRange에서 오류를 발생시킵니다.

a.Data = -1
Error setting property 'Data' of class 'ImData':
Value assigned to Data property is not in range 0...255

유효성 검사 함수에 대한 지원 추가하기

종속 함수를 클래스의 메서드로 구현하여 클래스 객체에 MATLAB 유효성 검사 함수가 지원되도록 할 수 있습니다. 각 함수에 대해 구현할 메서드를 결정하려면 MATLAB 유효성 검사 함수의 표에 나와 있는 유효성 검사 함수 도움말 페이지를 참조하십시오.

예를 들어, 클래스가 mustBeGreaterThan 유효성 검사 함수를 지원하도록 만들고 싶다고 가정하겠습니다. 다음 MATLAB 함수를 클래스의 메서드로 오버로드합니다.

  • isrealmustBeGreaterThan이 복소수를 지원하지 않으므로 항상 논리형 true를 반환합니다.

  • gtmustBeGreaterThan의 요구 사항에 따라 비교에 포함된 두 번째 객체는 스칼라여야 합니다.

SupportmBGT 클래스는 mustBeGreaterThan에 대한 지원을 구현합니다.

classdef SupportmBGT
   properties
      Prop(1,1) double {mustBeReal}
   end
   methods
      function obj = SupportmBGT(data)
         if nargin > 0
            obj.Prop = data;
         end
      end
      function tf = isreal(obj)
         tf = true;
      end
      function tf = gt(obj1, obj2)
         tf = [obj1(:).Prop] > obj2.Prop;
      end
   end
end

mustBeGreaterThan을 이 클래스의 객체에 사용합니다.

a = SupportmBGT(10);
b = SupportmBGT(12);
mustBeGreaterThan(a,b)
Error using mustBeGreaterThan (line 19)
Value must be greater than the comparison value.

관련 항목