속성 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 메서드는 재귀적으로 호출되지 않습니다. 속성 get 메서드 내에서는 해당 속성에 대한 참조문(reference statement)이 직접 실행됩니다.
값 객체(즉,
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 메서드는 재귀적으로 호출되지 않습니다. 속성 set 메서드 내에서는 해당 속성에 대한 대입문이 직접 실행됩니다.
MATLAB은 객체를 초기화하는 동안 속성에 디폴트 값을 할당할 때 set 메서드를 호출하지 않습니다. 그러나 생성자에서 속성값을 설정하면 set 메서드가 호출됩니다.
MATLAB은 객체를 불러올 때 set 메서드를 호출합니다.
MATLAB이 값 객체(
handle이 아닌 임의의 객체)를 복사하는 경우, 한 객체에서 다른 객체로 속성값을 복사할 때 set 메서드가 호출되지 않습니다.AbortSet특성을true로 하여 속성이 정의된 경우 현재 값과 동일한 값을 할당할 때는 해당 속성의 set 메서드가 호출되지 않습니다. 단, 속성에 get 메서드가 있는 경우 값을 비교할 수 있도록 이 메서드가 호출됩니다. 이 특성에 대한 자세한 내용은 Assignment When Property Value Is Unchanged 항목을 참조하십시오.