속성 get 및 set 메서드
연결된 속성에 액세스할 때마다 MATLAB®이 자동으로 호출하는 속성 get 메서드와 set 메서드를 정의할 수 있습니다. get 메서드 또는 set 메서드를 지정된 속성과 연결하려면 각각 형식 get. 및 PropertyNameset.을 사용하여 get 메서드와 set 메서드의 이름을 지정하십시오. PropertyName
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
endget 메서드 또는 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를 호출하고 Base 및 Height의 디폴트 값을 기반으로 Area의 값을 계산합니다. get 메서드가 오류를 발생시키는 경우 MATLAB은 이 오류를 표시하지 않고 해당 속성을 생략하여 표시합니다.
Base 및 Height의 값을 변경하고 Area에 다시 액세스합니다.
a.Base = 3; a.Height = 4; a.Area
Executing get.Area method.
ans =
6get 메서드 사용
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 항목을 참조하십시오.