Main Content

속성값을 유한한 목록으로 제한하기

제한된 값 세트만 허용하는 System object™ 속성을 생성하려면 열거형 또는 속성 유효성 검사를 사용하면 됩니다.

Simulink®MATLAB System 블록에서 사용되는 System object의 경우, 열거형 또는 속성 유효성 검사를 사용할 수 있습니다. 열거형을 사용할 경우, 열거형 역시 Simulink.IntEnumType에서 파생할 수도 있습니다. 이 유형의 열거형을 사용하여 사용자 지정 헤더 같은 특성을 MATLAB System 블록의 입력값이나 출력값에 추가할 수 있습니다. Use Enumerated Data in Simulink Models (Simulink)를 참조하십시오.

mustBeMember를 사용한 속성 유효성 검사

속성 유효성 검사로 속성값을 제한하려면 mustBeMember 유효성 검사 함수를 사용하십시오.

이 예제에서는 값 solid, dash 또는 dot를 가질 수 있는 Style 속성을 정의합니다. 디폴트 값은 solid이고 (1,1)은 속성을 스칼라로 정의합니다.

    properties
        Style (1,1) string {mustBeMember(Style, ["solid","dash","dot"])} = "solid";
    end
대/소문자를 구분하지 않는 일치를 지원하려면 대신 matlab.system.mustBeMember를 사용하십시오.
    properties
        Style (1,:) char {matlab.system.mustBeMember(Style, ["solid","dash","dot"])} = "solid";
    end

열거형 속성

System object에서 열거형 데이터를 사용하려면 System object 클래스 정의에서 열거형을 속성으로 참조하고 별도의 클래스 정의 파일에 열거형 클래스를 정의하십시오.

열거형 속성을 생성하려면 다음이 필요합니다.

  • 열거형 클래스로 설정한 System object 속성.

  • 이 속성에 대해 가능한 모든 값을 정의하여 연결한 열거형 클래스 정의.

이 예제에서는 색상에 대한 System object 열거형 속성을 정의합니다. 열거형 클래스 ColorValues의 정의는 다음과 같습니다.

classdef ColorValues < int32
    enumeration
        blue (0)
        red (1)
        green (2)
    end
end
ColorValues 클래스는 코드 생성 호환성을 위해 int32에서 상속됩니다. 열거형 값은 유효한 MATLAB 식별자여야 합니다.

System object에서 Color 속성은 blue가 디폴트 값으로 설정된 ColorValues 객체로 정의됩니다. (1,1)Color 속성을 스칼라로 정의합니다.

properties
   Color (1, 1) ColorValues = ColorValues.blue
end

Whiteboard System object 생성하기

이 예제에서는 Whiteboard System object™의 클래스 정의, 두 가지 유형의 유한한 목록 속성, 그리고 이 객체를 사용하는 방법을 보여줍니다. Whiteboard 객체를 실행할 때마다 이 객체는 화이트보드에 선을 그립니다.

Whiteboard System object의 정의

type Whiteboard.m
classdef Whiteboard < matlab.System
    % Whiteboard Draw lines on a figure window
    %
    
    
    properties(Nontunable)
        Color (1, 1) ColorValues = ColorValues.blue
        Style (1,1) string {mustBeMember(Style, ["solid","dash","dot"])} = "solid";
    end

    methods (Access = protected)
        function stepImpl(obj)
            h = Whiteboard.getWhiteboard();
            switch obj.Style
                case "solid"
                    linestyle = "-";
                case "dash"
                    linestyle = "--";
                case "dot"
                    linestyle = ":";
            end
            plot(h, randn([2,1]), randn([2,1]), ...
                "Color",string(obj.Color), "LineStyle",linestyle);
        end
        
        function releaseImpl(~)
            cla(Whiteboard.getWhiteboard());
            hold on
        end
    end
    
    methods (Static)
        function a = getWhiteboard()
            h = findobj('tag','whiteboard');
            if isempty(h)
                h = figure('tag','whiteboard');
                hold on
            end
            a = gca;
        end
    end
end

System object를 생성합니다.

greenInk = Whiteboard;
blueInk = Whiteboard; 

색을 변경하고 파란색 선 스타일을 설정합니다.

greenInk.Color = "green";
blueInk.Color = "blue";
blueInk.Style = "dot";

몇 개의 선을 그립니다.

for i=1:3
  greenInk();
  blueInk();
end

Figure contains an axes object. The axes object contains 6 objects of type line.

화이트보드를 지웁니다.

release(greenInk);
release(blueInk);

Figure contains an axes object. The axes object is empty.

관련 항목