Main Content

상수 값으로 클래스 속성 정의하기

명명된 상수 정의하기

상수 속성을 정의하는 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';

pMyProject의 인스턴스에 대한 핸들이며 ProjectInfo 상수 속성에 할당되어 있습니다.

MyProject.ProjectInfo.Department
ans =

Quality Assurance

클래스를 지우면 MyProject의 새 인스턴스가 ProjectInfo 속성에 할당됩니다.

clear classes
MyProject.ProjectInfo.Department
ans =

Engineering

속성이 Constant로 선언된 경우에만 정의 클래스의 인스턴스를 속성의 디폴트 값으로 할당할 수 있습니다.

상수 속성 — 가져오기 이벤트 지원 안 함

상수 속성은 속성 PreGet 또는 PostGet 이벤트를 지원하지 않습니다. Constant 속성의 GetObservable 특성을 true로 설정하면 MATLAB이 클래스 초기화 중에 경고를 발생시킵니다.

관련 예제

세부 정보