Main Content

클래스를 사용하여 그래픽스 표시하기

면적 계산 클래스

CircleArea 클래스는 일반적인 클래스 정의 구문을 보여줍니다. 이 클래스는 원의 반지름 값을 저장하고 원의 면적 정보를 요청할 경우 이를 계산합니다. CircleArea는 클래스의 객체를 그래픽으로 나타내고 표시하고 생성하기 위한 방법도 구현합니다.

CircleArea 클래스를 사용하려면, 다음 코드를 CircleArea.m이라는 파일에 복사하고 이 파일을 MATLAB® 경로에 있는 폴더에 저장합니다.

classdef CircleArea
   properties
      Radius
   end
   properties (Constant)
      P = pi
   end
   properties (Dependent)
      Area
   end
   methods
      function obj = CircleArea(r)
         if nargin > 0
            obj.Radius = r;
         end
      end
      function val = get.Area(obj)
         val = obj.P*obj.Radius^2;
      end
      function obj = set.Radius(obj,val)
         if val < 0
            error('Radius must be positive')
         end
         obj.Radius = val;
      end
      function plot(obj)
         r = obj.Radius;
         d = r*2;
         pos = [0 0 d d];
         curv = [1 1];
         rectangle('Position',pos,'Curvature',curv,...
            'FaceColor',[.9 .9 .9])
         line([0,r],[r,r])
         text(r/2,r+.5,['r = ',num2str(r)])
         title(['Area = ',num2str(obj.Area)])
         axis equal
      end
      function disp(obj)
         rad = obj.Radius;
         disp(['Circle with radius: ',num2str(rad)])
      end
   end
   methods (Static)
      function obj = createObj
         prompt = {'Enter the Radius'};
         dlgTitle = 'Radius';
         rad = inputdlg(prompt,dlgTitle);
         r = str2double(rad{:});
         obj = CircleArea(r);
      end
   end
end

CircleArea 클래스 사용하기

다음과 같이 대화 상자를 사용하여 객체를 생성합니다.

ca = CircleArea.createObj

반지름 값을 추가하고 확인을 클릭합니다.

Dialog for entering radius

정의된 원의 면적을 쿼리합니다.

ca.Area
ans =

  164.2202

오버로드된 plot 메서드를 호출합니다.

plot(ca)

Graph of circle with radius 7.23

클래스 정의에 대한 설명

클래스 정의 코드는 classdef 키워드로 시작하고, 그 뒤에 클래스 이름이 옵니다.

classdef CircleArea

properties-end 키워드 내에서 Radius 속성을 정의합니다. 디폴트 특성을 사용합니다.

   properties
      Radius
   end

P 속성을 Constant로 정의합니다(상수 값으로 클래스 속성 정의하기). 클래스가 초기화될 때 한 번만 pi 함수를 호출합니다.

   properties (Constant)
      P = pi
   end

Area 속성의 값은 Radius 속성에 따라 달라지므로 이 속성을 Dependent로 정의합니다.

   properties (Dependent)
      Area
   end

CircleArea 클래스 생성자 메서드는 클래스와 동일한 이름을 가지며 원의 반지름 값을 인수로 받습니다. 이 메서드는 입력 인수 없이 사용할 수도 있습니다. (클래스 생성자 메서드)

   methods
      function obj = CircleArea(r)
         if nargin > 0
            obj.Radius = r;
         else
            obj.Radius = 0;
         end
      end

Area 속성이 Dependent이므로 클래스는 그 값을 저장하지 않습니다. get.Area 메서드는 쿼리될 때마다 Area 속성의 값을 계산합니다. (종속 속성에 대한 get 메서드 및 set 메서드)

      function val = get.Area(obj)
         val = obj.P*obj.Radius^2;
      end

set.Radius 메서드는 Radius 속성에 할당된 값을 테스트하여, 값이 0보다 작지 않은지 확인합니다. MATLAB은 set.Radius를 호출하여 값을 Radius에 할당합니다. (속성 get 및 set 메서드)

      function obj = set.Radius(obj,val)
         if val < 0
            error('Radius must be positive')
         end
         obj.Radius = val;
      end

CircleArea 클래스는 plot 함수를 오버로드합니다. plot 메서드는 rectangle 함수를 사용하여 원을 만들고 반지름을 그립니다. (클래스 정의에서 함수 오버로드하기)

      function plot(obj)
         r = obj.Radius;
         d = r*2;
         pos = [0 0 d d];
         curv = [1 1];
         rectangle('Position',pos,'Curvature',curv)
         line([0,r],[r,r])
         text(r/2,r+.5,['r = ',num2str(r)])
         axis equal
      end

CircleArea 클래스는 disp 함수를 오버로드하여, MATLAB이 명령 창에서 객체를 표시하는 방법을 변경합니다.

      function disp(obj)
         rad = obj.Radius;
         disp(['Circle with radius: ',num2str(rad)])
      end
end
methods (Static)

CircleArea 클래스는 대화 상자를 사용하여 객체를 만드는 Static 메서드를 정의합니다. (정적 메서드)

      function obj = createObj
         prompt = {'Enter the Radius'};
         dlgTitle = 'Radius';
         rad = inputdlg(prompt,dlgTitle);
         r = str2double(rad{:});
         obj = CircleArea(r);
      end

Static methods 블록의 끝이고 classdef 블록의 끝입니다.

   end
end