Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

속성 유효성 검사 함수

MATLAB 유효성 검사 함수

MATLAB®은 속성 유효성 검사에 사용할 함수를 정의합니다. 이들 함수는 유효성 검사에 일반적으로 사용되는 패턴을 지원하며 설명이 포함된 오류 메시지를 제공합니다. 다음 표에서는 MATLAB 유효성 검사 함수를 분류하고 그 사용 방법을 설명합니다.

숫자형 값 특성

이름

의미

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

mustBePositive(value)

value > 0

gt, isreal, isnumeric, islogical

mustBeNonpositive(value)

value <= 0

ge, isreal, isnumeric, islogical

mustBeNonnegative(value)

value >= 0

ge, isreal, isnumeric, islogical

mustBeNegative(value)

value < 0

lt, isreal, isnumeric, islogical

mustBeFinite(value)

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

isfinite

mustBeNonNan(value)

valueNaN 요소가 없습니다.

isnan

mustBeNonzero(value)

value ~= 0

eq, isnumeric, islogical

mustBeNonsparse(value)

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

issparse

mustBeReal(value)

value에 허수부가 없습니다.

isreal

mustBeInteger(value)

value == floor(value)

isreal, isfinite, floor, isnumeric, islogical

mustBeNonmissing(value)

value가 누락값을 포함할 수 없습니다.

ismissing

다른 값과 비교

이름

의미

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

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

데이터형

이름

의미

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

mustBeA(value,classnames)

value가 특정 클래스여야 합니다.

클래스 정의 관계 사용

mustBeNumeric(value)

value가 숫자형이어야 합니다.

isnumeric

mustBeNumericOrLogical(value)

value가 숫자형 또는 논리형이어야 합니다.

isnumeric, islogical

mustBeFloat(value)

value가 부동소수점 배열이어야 합니다.

isfloat

mustBeUnderlyingType(value,typename)

value가 지정된 기본 유형을 가져야 합니다.

isUnderlyingType

크기

이름

의미

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

mustBeNonempty(value)

value가 비어 있지 않습니다.

isempty

mustBeScalarOrEmpty(value)value가 스칼라이거나 비어 있어야 합니다.

isscalar, isempty

mustBeVector(value)value가 벡터여야 합니다.

isvector

멤버 여부 및 범위

이름

의미

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

mustBeMember(value,S)

valueS의 멤버와 정확히 일치합니다.

ismember

mustBeInRange(value,lower,upper,boundflags)value가 범위 내에 있어야 합니다.

gt, ge, lt, le

텍스트

이름

의미

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

mustBeFile(path)

path가 파일을 가리켜야 합니다.

isfile

mustBeFolder(folder)path가 폴더를 가리켜야 합니다.

isfolder

mustBeNonzeroLengthText(value)

value가 0이 아닌 길이의 텍스트 조각이어야 합니다.

해당 없음

mustBeText(value)

value가 string형 배열, 문자형 벡터 또는 문자형 벡터로 구성된 셀형 배열이어야 합니다.

해당 없음

mustBeTextScalar(value)

value가 한 조각의 텍스트여야 합니다.

해당 없음
mustBeValidVariableName(varname)varname이 유효한 변수 이름이어야 합니다.

isvarname

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

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

유효성 검사 프로세스 동안 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 경로에 함수를 배치하여 어떠한 클래스에서도 사용 가능하게 만들 수 있습니다.

예를 들어, ImgData 클래스는 서브클래스를 제외하고, 다른 숫자형 클래스에서의 변환을 허용하지 않으면서 로컬 함수를 사용하여 Data 속성을 uint8 값 또는 uint16 값으로만 제한하는 유효성 검사기를 정의합니다. 미리 정의된 유효성 검사 함수 mustBeInRange는 허용되는 값의 범위를 제한합니다.

classdef ImgData
    properties
        Data {mustBeImData(Data), mustBeInRange(Data,0,255)} = uint8(0)
    end
end
function mustBeImData(a)
    % Check for specific class     
    if ~(strcmp(cname, 'uint8') || strcmp(cname, 'uint16'))
        eidType = 'ImData:notUint8OrUint16';
        msgType = 'Value assigned to Data property is not uint8 or uint16 data.';
        throwAsCaller(MException(eidType,msgType))
    end
end

ImgData 클래스의 인스턴스를 생성하면 MATLAB이 디폴트 값이 범위 0...255에 속하고 비어 있지 않은 uint8 값이나 uint16 값인지 검사합니다. 디폴트 값은 속성에 할당된 다른 값과 마찬가지로 유효성 검사 요구 사항을 충족해야 합니다.

a = ImgData
a = 

  ImgData with properties:

    Data: 0

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

a.Data = 'red';
Error setting property 'Data' of class 'ImgData'. Value assigned to
Data property is not uint8 or uint16 data.

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

a.Data = uint16(312);
Error setting property 'Data' of class 'ImgData'. Value must be greater
than or equal to 0, and less than or equal to 255.

관련 함수는 mustBeInteger, mustBeNumeric, mustBePositive를 참조하십시오.

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

종속 함수를 클래스의 메서드로 구현하여 클래스 객체에 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.

관련 항목