Main Content

속성 구문

이 항목에서는 MATLAB®에서 properties...end 블록을 사용하여 클래스 속성을 정의하는 방법을 설명하고, 속성 유효성 검사 구문과 개념에 대해 소개합니다. 또한 클래스 인스턴스에서 속성값을 가져오고 설정하는 방법에 대한 기본 내용에 대해서도 살펴봅니다.

속성 정의 블록

propertiesend 키워드는 동일한 특성 설정을 갖는 하나 이상의 클래스 속성을 정의합니다. 다음은 속성 블록을 정의하기 위한 일반적인 구문입니다.

properties (attributes)
   propName1
   ...
   propNameN
end

참고

속성의 이름은 클래스의 이름 또는 클래스로 정의된 다른 멤버의 이름과 동일할 수 없습니다.

예를 들어 다음 properties 블록은 SetAccess 특성이 private으로 설정된 두 가지 속성을 정의합니다. 이 특성 설정은 속성값을 PrivateProps 클래스의 멤버만 설정할 수 있다는 의미입니다.

classdef PrivateProps
   properties (SetAccess = private)
      Property1
      Property2
   end
end

서로 다른 특성을 가진 속성을 나타내기 위해 여러 개의 속성 블록을 정의할 수도 있습니다. 이 예제에서 한 properties 블록은 프라이빗 SetAccess를 갖는 속성을 정의하고, 또 다른 블록은 추상 속성을 정의합니다. 서로 다른 특성을 지닌 속성 블록은 클래스 정의에서 어떤 순서로 지정해도 좋습니다.

classdef MultiplePropBlocks
   properties (SetAccess = private)
      Property1
      Property2
   end
   properties (Abstract)
      Property3
   end
end

속성 특성에 대한 전체 목록은 속성 특성(Attribute) 항목을 참조하십시오.

속성 유효성 검사 구문

properties 블록 내에서 속성 유효성 검사를 사용할 수 있습니다. 속성 유효성 검사를 통해 각 속성값에 크기와 클래스 같은 하나 이상의 제한을 적용할 수 있습니다. 각 속성에 디폴트 값을 정의할 수도 있습니다. 속성 유효성 검사의 일반적인 구문은 다음과 같습니다.

properties (attributes)
   propName1 (dimensions) class {validators} = defaultValue
   ...
end

  • (dimensions) — 속성값의 크기로, 괄호로 묶인 두 개 이상의 숫자가 쉼표로 구분된 목록으로 지정됩니다(예: (1,2) 또는 (1,:)). 콜론을 사용하면 그 차원에서 임의의 길이가 허용됩니다. 값의 차원은 (dimensions)와 정확이 일치하거나 호환되어야 합니다. 자세한 내용은 기본 연산에 대해 호환되는 배열 크기 항목을 참조하십시오. (dimensions)에는 표현식이 포함될 수 없습니다.

  • class — 속성값의 클래스로, 클래스 이름으로 지정됩니다(예: double). 값은 지정된 클래스이거나 변환 가능한 클래스여야 합니다. 예를 들어 double형을 지정하는 속성은 single형의 값을 받아 double형으로 변환합니다. MATLAB에서 이미 사용 가능한 클래스 외에도 자신만의 클래스를 속성 유효성 검사기로 사용할 수 있습니다. 사용자 정의 클래스에 대해 속성 유효성 검사를 사용하면 지정된 class의 서브클래스를 오류 없이 전달할 수 있지만, 서브클래스가 슈퍼클래스로 변환되지는 않습니다.

  • {validators} — 유효성 검사 함수로, 중괄호로 묶인 쉼표로 구분된 목록으로 지정됩니다(예: mustBePositivemustBeScalarOrEmpty). class와 달리 유효성 검사 함수는 속성값을 수정하지 않습니다. 속성값이 조건과 일치하지 않으면 유효성 검사 함수 오류가 발생합니다. 유효성 검사 함수 목록은 속성 유효성 검사 함수 항목을 참조하십시오. 사용자가 자체적인 유효성 검사 함수를 정의할 수도 있습니다.

  • defaultValue — 디폴트 속성값은 지정된 크기, 클래스와 유효성 검사 규칙을 따라야 합니다. 표현식도 디폴트 값이 될 수 있습니다. MATLAB이 디폴트 값 표현식을 실행하는 방법에 대한 자세한 내용은 디폴트 값으로 속성 정의 항목을 참조하십시오.

다음 클래스는 하나의 속성을 정의합니다. properties 블록에는 정의된 명시적 특성이 없으며, 이는 퍼블릭 속성의 블록을 정의하는 것과 동일합니다. 또한 MyPublicData는 양의 double형으로 구성된 벡터여야 하고, 디폴트 값은 [1 1 1]입니다.

classdef ValidationExample
   properties
      MyPublicData (1,:) double {mustBePositive} = [1 1 1]
   end  
end

모든 유효성 검사 옵션을 한 번에 사용해서는 안 됩니다. 동일한 블록의 서로 다른 속성에는 유효성 검사기를 다양하게 조합하여 사용할 수 있습니다. 이 예제에서 RestrictedByClass 속성은 클래스 유효성 검사만 사용하는 반면, RestrictedByFunction은 유효성 검사 함수를 사용하고 디폴트 값을 할당합니다.

classdef DifferentValidation
   properties
      RestrictedByClass uint32
      RestrictedByFunction {mustBeInteger} = 0
   end
end

자세한 내용은 Property Class and Size Validation 항목과 속성 유효성 검사 함수 항목을 참조하십시오.

속성 액세스 구문

속성 액세스 구문은 MATLAB 구조체 필드 구문과 비슷합니다. 예를 들어, obj가 클래스의 객체인 경우 속성 이름을 참조하여 속성의 값을 가져올 수 있습니다.

val = obj.PropertyName

등호의 왼쪽에 속성 참조를 배치하여 속성에 값을 할당합니다.

obj.PropertyName = val

예를 들어 ValidationExample 클래스를 인스턴스화하고 MyPublicData의 값을 읽어옵니다.

classdef ValidationExample
   properties
      MyPublicData (1,:) double {mustBePositive} = [1 1 1]
   end  
end
x = ValidationExample;
x.MyPublicData
ans =

     1     1     1

정의된 유효성 검사기를 만족하는 속성에 새 값을 할당합니다.

x.MyPublicData = [2 3 5 7];

이 구조체 필드 구문을 사용할 때 MATLAB이 자동으로 호출하는 get 메서드와 set 메서드를 선택적으로 정의할 수 있습니다. 자세한 내용은 속성 get 및 set 메서드 항목을 참조하십시오.

변수를 사용하여 속성 참조하기

MATLAB은 다음과 같은 형식의 표현식을 사용하여 string형 또는 char형 변수에서 속성 이름을 확인할 수 있습니다.

object.(PropertyNameVar)

PropertyNameVar은 유효한 객체 속성의 이름을 포함하는 변수입니다. 속성 이름을 인수로 전달할 때 이 구문을 사용하십시오. 예를 들어, getPropValue 함수는 KeyType 속성의 값을 반환합니다.

PropName = "KeyType";
function o = getPropValue(obj,PropName)
   o = obj.(PropName);
end

관련 항목