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