Main Content

속성 get 및 set 메서드

연결된 속성에 액세스할 때마다 MATLAB®이 자동으로 호출하는 속성 get 메서드와 set 메서드를 정의할 수 있습니다. get 메서드 또는 set 메서드를 지정된 속성과 연결하려면 각각 형식 get.PropertyNameset.PropertyName을 사용하여 get 메서드와 set 메서드의 이름을 지정하십시오.

get 메서드와 set 메서드는 속성에 액세스하는 것 외에도 추가 단계를 수행할 수 있습니다. get 메서드를 사용하면 다음을 수행할 수 있습니다.

  • 종속 속성의 값을 계산할 수 있습니다.

  • 사용자에게 제시한 것과 다른 형식으로 데이터를 저장할 수 있습니다.

set 메서드를 사용하면 다음을 수행할 수 있습니다.

  • 내장 유효성 검사 기법에서 지원하는 것보다 좀 더 복잡한 속성 유효성 검사를 설계할 수 있습니다.

  • 사용자 지정 오류 메시지를 발생시킬 수 있습니다.

  • 속성값 변경의 직접적인 결과가 되는 동작(예: 하드웨어 장치와의 연결 설정 또는 업데이트, 또는 파일 열기)을 수행하여 리소스에 대한 액세스를 보장할 수 있습니다.

get 메서드 및 set 메서드는 클래스에 오버헤드를 야기합니다. 자주 액세스하는 속성의 get 메서드와 set 메서드에서는 복잡하고 계산량이 많은 연산을 피하십시오.

참고

여기에 설명된 get 메서드 및 set 메서드를 직접 호출할 수는 없습니다. 속성값에 액세스할 때 MATLAB이 이러한 메서드를 자동으로 호출합니다. 사용자가 호출할 수 있는 get 메서드 및 set 메서드 구현에 대한 자세한 내용은 속성에 대한 set/get 인터페이스 구현하기 항목을 참조하십시오.

속성 get 메서드

연결된 속성값이 쿼리될 때마다 MATLAB이 자동으로 호출하는 get 메서드를 정의할 수 있습니다. get 메서드는 해당 속성값을 반환해야 합니다. get 메서드는 다음 구문을 사용합니다. 여기서 PropertyName은 속성의 이름입니다.

methods 
   function value = get.PropertyName(obj)
      ...
   end
end

get 메서드 또는 set 메서드를 정의하는 메서드 블록은 특성을 지정할 수 없습니다.

예를 들어, triangleArea 클래스는 Area 속성에 대해 get 메서드를 정의합니다. Area는 종속 속성으로 정의되며 이는 값을 저장하지 않음을 의미합니다. Area에 대한 get 메서드는 요청 시 값을 계산합니다. (종속 속성에 대한 자세한 내용은 종속 속성에 대한 get 메서드 및 set 메서드 항목을 참조하십시오.)

classdef triangleArea
   properties
      Base = 1
      Height = 1
   end
   properties (Dependent)
      Area
   end
   methods
      function a = get.Area(obj)
         disp("Executing get.Area method.")
         a = 0.5*obj.Base*obj.Height;
      end
   end
end

triangleArea의 인스턴스를 만듭니다.

a = triangleArea
a = 

Executing get.Area method.
  triangleArea with properties:

      Base: 1
    Height: 1
      Area: 0.5000

객체를 표시할 때 MATLAB은 표시하는 속성에 대해 정의된 get 메서드를 호출합니다. 이 경우 메서드는 get.Area를 호출하고 BaseHeight의 디폴트 값을 기반으로 Area의 값을 계산합니다. get 메서드가 오류를 발생시키는 경우 MATLAB은 이 오류를 표시하지 않고 해당 속성을 생략하여 표시합니다.

BaseHeight의 값을 변경하고 Area에 다시 액세스합니다.

a.Base = 3;
a.Height = 4;
a.Area
Executing get.Area method.

ans =

     6

get 메서드 사용

  • get 메서드는 재귀적으로 호출되지 않습니다.

  • 값 객체(즉, handle 클래스에서 파생되지 않은 객체)를 복사하는 경우, 한 객체에서 다른 객체로 속성값을 복사할 때 get 메서드가 호출되지 않습니다.

속성 set 메서드

연결된 속성에 값이 할당될 때마다 MATLAB이 자동으로 호출하는 set 메서드를 정의할 수 있습니다. set 메서드는 클래스가 값인지 아니면 핸들 클래스인지에 따라 다음 구문을 사용합니다.

  • 값 클래스의 set 메서드는 수정된 객체를 반환해야 합니다.

    methods 
       function obj = set.PropertyName(obj,value) 
          ...
       end
    end
  • 핸들 클래스의 set 메서드는 수정된 객체를 반환할 필요가 없습니다.

    methods 
       function set.PropertyName(obj,value) 
          ...
       end
    end

get 메서드 또는 set 메서드를 정의하는 메서드 블록은 특성을 지정할 수 없습니다.

예를 들어, symPosDef는 속성 유효성 검사에 set 메서드를 사용합니다. inputMatrix 속성이 새 값으로 설정되면 set 메서드는 chol 함수를 호출하여 입력 행렬이 양의 정부호 대칭 행렬인지 확인합니다. 양의 정부호 대칭 행렬이면 이 메서드는 inputMatrix를 해당 값으로 설정합니다. 양의 정부호 대칭 행렬이 아니면 이 메서드는 사용자 지정 오류 메시지를 반환합니다.

classdef symPosDef
  properties
     inputMatrix = [1 0; 0 1]
  end
  methods
    function obj = set.inputMatrix(obj,val)
      try chol(val)
         obj.inputMatrix = val;
      catch ME
         error("inputMatrix must be symmetric positive definite.")
       end
     end
  end
end

symPosDef의 인스턴스를 만들고 inputMatrix를 양의 정부호 대칭 행렬이 아닌 값으로 설정합니다.

s = symPosDef;
s.inputMatrix = [1 2; 1 1]
Error using symPosDef/set.inputMatrix
inputMatrix must be symmetric positive definite.

set 메서드 사용

  • set 메서드는 재귀적으로 호출되지 않습니다.

  • MATLAB은 객체를 초기화하는 동안 속성에 디폴트 값을 할당할 때 set 메서드를 호출하지 않습니다. 그러나 생성자에서 속성값을 설정하면 set 메서드가 호출됩니다.

  • MATLAB은 객체를 불러올 때 set 메서드를 호출합니다.

  • MATLAB이 값 객체(handle이 아닌 임의의 객체)를 복사하는 경우, 한 객체에서 다른 객체로 속성값을 복사할 때 set 메서드가 호출되지 않습니다.

  • AbortSet 특성을 true로 하여 속성이 정의된 경우 현재 값과 동일한 값을 할당할 때는 해당 속성의 set 메서드가 호출되지 않습니다. 단, 속성에 get 메서드가 있는 경우 값을 비교할 수 있도록 이 메서드가 호출됩니다. 이 특성에 대한 자세한 내용은 Assignment When Property Value Is Unchanged 항목을 참조하십시오.

관련 항목