Main Content

속성값 초기화하기

속성값을 초기화하는 기본적인 방법에는 다음 두 가지가 있습니다.

  • 디폴트 값으로 속성 정의 — MATLAB®은 모든 인스턴스의 속성에 동일한 초기값을 할당합니다.

  • 생성자에서 속성값 설정 — 생성자는 인스턴스가 고유한 초기 속성값을 가질 수 있도록 각 인스턴스에 대해 대입문을 실행합니다.

디폴트 값으로 속성 정의

값 또는 표현식을 사용하여 개별 속성에 디폴트 값을 할당할 수 있습니다. 표현식은 변수를 포함할 수 없습니다. 이 예제에서는 속성의 디폴트 값을 정의하는 여러 가지 방법을 보여줍니다.

classdef PropExample
   properties
      Prop1
      Prop2 = "some text"
      Prop3 = sin(pi/12)
      Prop4 = datetime.empty 
      Prop5 (1,1) double {mustBePositive} = 1
   end
end
  • Prop1 — 속성 정의가 디폴트 값을 지정하지 않으므로 MATLAB은 속성값을 빈 double형([])으로 초기화합니다.

  • Prop2 — 디폴트 값은 string형 스칼라 "some text"입니다.

  • Prop3 — 디폴트 값은 sin(pi/12)의 값입니다. 이 속성을 읽으면 표현식 자체가 아니라 실행된 표현식(0.2588)이 반환됩니다.

    디폴트 값으로 할당하는 표현식의 실행에 대한 자세한 내용은 Evaluation of Expressions in Class Definitions 항목 및 Properties Containing Objects 항목을 참조하십시오.

  • Prop4 — 디폴트 값은 빈 datetime 객체입니다.

  • Prop5 — 디폴트 값은 1이고 속성값은 일반적으로 양의 double형 스칼라로 제한됩니다. 속성 정의에서 속성값에 대한 크기, 클래스 또는 유효성 검사 함수 제한을 지정하는 경우 디폴트 값은 그러한 조건을 충족해야 합니다. 예를 들어, 디폴트 값 0은 mustBePositive를 만족하지 않으므로 인스턴스화 중에 오류를 일으킬 수 있습니다.

    크기, 클래스 및 유효성 검사 함수 기준의 속성 제한에 대한 자세한 내용은 속성값 유효성 검사 항목을 참조하십시오.

참고

MATLAB은 속성값이 처음 필요할 때(예: 클래스가 처음 인스턴스화될 때) 디폴트 표현식을 실행합니다. 그러면 동일한 디폴트 값이 클래스의 모든 인스턴스에 사용됩니다. MATLAB은 클래스 정의가 메모리에서 지워지지 않는 한 해당 디폴트 표현식을 다시 실행하지 않습니다.

객체를 디폴트 속성값으로 처리하기

사용자가 핸들 클래스 생성자를 사용하여 디폴트 속성값을 만드는 경우 MATLAB은 클래스가 처음 사용될 때만 생성자를 호출하고, 그다음부터는 동일한 객체 핸들을 모든 인스턴스에서 해당 속성의 디폴트 값으로 사용합니다. 모든 객체 핸들이 동일한 객체를 참조하므로 한 인스턴스의 핸들 객체에 대한 변경 사항은 모든 인스턴스의 핸들 객체에 반영됩니다. 클래스를 인스턴스화할 때마다 핸들 객체의 새 인스턴스로 속성값을 초기화하려면 생성자에서 속성값을 할당하십시오.

생성자에서 속성값 설정

클래스 생성자 내에서 속성에 값을 할당하려면 점 표기법을 사용하여 생성자가 반환하는 객체(출력 변수 obj)와 속성 이름을 참조합니다.

classdef MyClass
   properties
      Prop1
   end
   methods
      function obj = MyClass(intval)
         obj.Prop1 = intval;
      end
   end
end

클래스 생성자의 속성에 값을 할당하는 경우 MATLAB은 생성된 각 객체에 대해 대입문을 실행합니다. 각 객체가 해당 속성에 대한 고유한 값을 포함하도록 하려면 생성자에서 속성값을 할당하십시오.

예를 들어, ContainsHandle은 각 인스턴스에 대해 MyHandleClass 클래스의 고유한 핸들 객체를 Prop1에 할당합니다. ContainsHandle은 이 작업을 자체 생성자에서 MyHandleClass 생성자를 호출하여 수행합니다.

classdef ContainsHandle
   properties
       Prop1
   end
   methods
       function obj = ContainsHandle(keySet,valueSet)
           obj.Prop1 = MyHandleClass(keySet,valueSet);
       end
   end
end

생성자 메서드에 대한 자세한 내용은 생성자에서 객체 참조하기 항목을 참조하십시오.

생성 전 속성 유효성 검사

MATLAB은 생성자에서 디폴트 속성값을 할당하기 전에 이 값의 유효성을 검사합니다. properties 블록에 할당된 디폴트 값과 클래스 생성자의 속성에 대해 설정된 모든 값은 지정된 유효성 검사를 충족해야 합니다. 예를 들어, PropInitProp를 양의 double형 스칼라로 제한하지만 디폴트 값을 할당하지 않습니다. 기본적으로 MATLAB은 빈 double형의 초기값을 할당합니다.

classdef PropInit
    properties
        Prop (1,1) double {mustBePositive} 
    end
    methods
        function obj = PropInit(positiveInput)
            obj.Prop = positiveInput;
        end
    end
end

Prop에 유효한 값으로 클래스 생성자를 호출해도 Prop의 초기 빈 double형으로 인해 오류가 발생합니다. 빈 double형은 유효성 검사 함수 mustBePositive를 충족하지 않습니다.

obj = PropInit(2);
Error using implicit default value of property 'Prop' of class 'PropInit':
Value must be positive.

이 문제가 발생하지 않도록 하려면 생성자에서 디폴트 속성값을 덮어쓰려는 경우에도 속성이 유효성 검사를 만족하는 디폴트 값을 갖는지 확인하십시오.

관련 항목