상수 값으로 클래스 속성 정의하기
명명된 상수 정의하기
상수 속성을 정의하는 MATLAB® 클래스를 생성하여 이름으로 참조할 수 있는 상수를 정의할 수 있습니다.
상수 속성을 사용하여 이름으로 액세스할 수 있는 상수 값을 정의합니다. 속성 블록에 Constant 특성을 선언하여 상수 속성과 함께 클래스를 생성합니다. Constant 특성을 설정하면 값이 속성 블록에 지정된 값으로 초기화된 후에는 변경될 수 없습니다.
값을 상수 속성에 할당하기
MATLAB 표현식과 함께 Constant 속성에 값을 할당합니다. 예를 들면 다음과 같습니다.
classdef NamedConst properties (Constant) R = pi/180 D = 1/NamedConst.R AccCode = '0145968740001110202NPQ' RN = rand(5) end end
MATLAB은 클래스를 불러올 때 표현식을 실행합니다. 따라서, rand 함수에 대한 단일 호출의 결과가 MATLAB이 RN에 할당하는 값이며 이후 NamedConst.RN을 참조해도 이 값이 변경되지 않습니다. clear classes를 호출하면 MATLAB이 클래스를 다시 불러오고 상수 속성을 다시 초기화합니다.
상수 속성 참조하기
클래스 이름과 속성 이름을 사용하여 상수를 참조할 수 있습니다.
ClassName.PropName
예를 들어, 앞의 섹션에서 정의한 NamedConst 클래스의 상수 R, 즉 각도를 라디안으로 변환하는 데 사용하는 상수를 참조합니다.
radi = 45*NamedConst.R
radi =
0.7854네임스페이스 내 상수
이름으로 액세스할 수 있는 상수 값에 대한 라이브러리를 생성하려면 먼저 네임스페이스 폴더를 생성한 후 다양한 클래스를 정의하여 상수를 구성하십시오. 예를 들어, 천문학적인 계산을 수행하는 데 유용한 상수 집합을 구현하려면 AstroConstants 클래스를 constants라는 네임스페이스 내부에 정의하면 됩니다.
+constants/@AstroConstants/AstroConstants.m
이 클래스는 다음과 같이 값이 할당된 Constant 속성 집합을 정의합니다.
classdef AstroConstants properties (Constant) C = 2.99792458e8 % m/s G = 6.67259 % m/kgs Me = 5.976e24 % Earth mass (kg) Re = 6.378e6 % Earth radius (m) end end
이 상수 집합을 사용하려면 정식 클래스 이름으로 이 집합을 참조하십시오. 예를 들어, 다음 함수에서는 AstroContants에 정의된 상수 일부를 사용합니다.
function E = energyToOrbit(m,r) E = constants.AstroConstants.G * constants.AstroConstants.Me * m * ... (1/constants.AstroConstants.Re-0.5*r); end
네임스페이스를 함수로 가져오면 네임스페이스 이름을 반복할 필요가 없습니다(import 참조).
function E = energyToOrbit(m,r) import constants.*; E = AstroConstants.G * AstroConstants.Me * m * ... (1/AstroConstants.Re - 0.5 * r); end
상수 속성에 핸들 객체 할당
클래스가 핸들 객체를 값으로 갖는 상수 속성을 정의하는 경우 핸들 객체 속성에 값을 할당할 수 있습니다. 핸들 객체에 액세스하려면 지역 변수를 생성하십시오.
예를 들어, ConstMapClass 클래스가 상수 속성을 정의한다고 가정하겠습니다. 이 상수 속성의 값이 핸들 객체(containers.Map 객체)입니다.
classdef ConstMapClass < handle properties (Constant) ConstMapProp = containers.Map end end
현재 날짜를 Date 키에 할당하려면 상수 속성에서 핸들을 반환한 후 대입문의 좌변에 지역 변수를 사용하여 값을 할당하십시오.
localMap = ConstMapClass.ConstMapProp
localMap('Date') = datestr(clock);대입문의 좌변에는 상수 속성에 대한 참조를 사용할 수 없습니다. 예를 들어, MATLAB은 다음 명령문을 ConstMapProp 필드를 갖는 ConstMapClass라는 struct를 생성하는 것으로 해석합니다.
ConstMapClass.ConstMapProp('Date') = datestr(clock);상수 속성에 임의의 객체 할당
정의 클래스의 인스턴스를 상수 속성에 할당할 수 있습니다. MATLAB은 클래스를 불러올 때 상수 속성에 할당되는 인스턴스를 생성합니다. 이 기법은 정의 클래스가 handle 클래스인 경우에만 사용할 수 있습니다.
MyProject는 다음과 같은 클래스의 예입니다.
classdef MyProject < handle properties (Constant) ProjectInfo = MyProject end properties Date Department ProjectNumber end methods (Access = private) function obj = MyProject obj.Date = datestr(clock); obj.Department = 'Engineering'; obj.ProjectNumber = 'P29.367'; end end end
Constant 속성을 통해 속성 데이터를 참조합니다.
MyProject.ProjectInfo.Date
ans = 18-Apr-2002 09:56:59
MyProject가 핸들 클래스이기 때문에 상수 속성에 할당된 인스턴스에 대한 핸들을 가져올 수 있습니다.
p = MyProject.ProjectInfo;
이 핸들을 사용하여 MyProject 클래스의 데이터에 액세스합니다.
p.Department
ans = Engineering
이 핸들을 사용하여 MyProject 클래스의 상수가 아닌 속성을 수정합니다.
p.Department = 'Quality Assurance';p는 MyProject의 인스턴스에 대한 핸들이며 ProjectInfo 상수 속성에 할당되어 있습니다.
MyProject.ProjectInfo.Department
ans = Quality Assurance
클래스를 지우면 MyProject의 새 인스턴스가 ProjectInfo 속성에 할당됩니다.
clear classes
MyProject.ProjectInfo.Department
ans = Engineering
속성이 Constant로 선언된 경우에만 정의 클래스의 인스턴스를 속성의 디폴트 값으로 할당할 수 있습니다.
상수 속성은 이벤트를 지원하지 않음
상수 속성은 속성 이벤트를 지원하지 않습니다. Constant 속성의 GetObservable 또는 SetObservable 특성을 true로 설정하면 MATLAB이 클래스 초기화 중에 경고를 발생시킵니다.