이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

추상 클래스

추상 클래스

추상 클래스는 클래스 그룹에 공통되지만 각 클래스 내에서 고유하게 구현되어야 하는 기능을 설명하는 데 유용합니다.

 추상 클래스 용어

추상 클래스는 관련 서브클래스의 그룹에 대한 기반(즉, 슈퍼클래스) 역할을 합니다. 추상 클래스는 서브클래스가 구현하는 추상 속성 및 추상 메서드를 정의할 수 있습니다. 각 서브클래스는 특정 요구 사항을 지원하는 방식으로 구체 속성 및 구체 메서드를 구현할 수 있습니다.

구체 서브클래스 구현하기

서브클래스가 구체 클래스가 되려면 상속된 모든 추상 속성과 추상 메서드를 구현해야 합니다. 그렇지 않으면, 서브클래스도 추상 클래스가 됩니다.

MATLAB®은 서브클래스가 구체 메서드를 구현할 때 동일한 시그니처 또는 특성을 사용하도록 강제하지 않습니다.

추상 클래스는 다음을 수행할 수 있습니다.

  • 추상이 아닌 속성과 메서드를 정의할 수 있습니다.

  • 상속을 통해 구체 멤버를 전달할 수 있습니다.

  • 추상 멤버를 정의할 필요가 없습니다.

추상 클래스로 클래스 선언하기

다음 선언이 있는 클래스는 추상 클래스입니다.

  • Abstract 클래스 특성

  • 추상 메서드

  • 추상 속성

추상 클래스의 서브클래스가 상속된 모든 추상 메서드 또는 추상 속성에 대해 구체적인 구현을 정의하지 않는다면 이 클래스도 추상 클래스가 됩니다.

추상 클래스

classdef 문에서 클래스를 추상 클래스로 선언할 수 있습니다.

classdef (Abstract) AbsClass 
   ...
end

Abstract 클래스 특성을 선언하는 클래스의 경우 다음을 참고하십시오.

  • 구체 서브클래스는 추상으로 선언된 속성 또는 메서드를 재정의해야 합니다.

  • 추상 클래스는 추상 메서드 또는 추상 속성을 정의할 필요가 없습니다.

추상 메서드 또는 추상 속성을 정의하면 MATLAB이 클래스의 Abstract 특성을 자동으로 true로 설정합니다.

추상 메서드

다음과 같이 추상 메서드를 정의할 수 있습니다.

methods (Abstract)
   abstMethod(obj)
end

Abstract 메서드 특성을 선언하는 메서드의 경우 다음을 참고하십시오.

  • function...end 블록을 사용하여 추상 메서드를 정의하지 마십시오. 메서드 시그니처만 사용해야 합니다.

  • 추상 메서드는 추상 클래스에서 구체적으로 구현되지 않습니다.

  • 구체 서브클래스는 동일한 개수의 입력 인수와 출력 인수를 지원해야 할 필요가 없으며 동일한 인수 이름을 사용할 필요도 없습니다. 하지만 서브클래스가 자기 자신의 메서드를 구현할 때는 일반적으로 동일한 시그니처를 사용합니다.

추상 속성

다음과 같이 추상 속성을 정의할 수 있습니다.

properties (Abstract)
   AbsProp
end

Abstract 속성 특성을 선언하는 속성의 경우 다음을 참고하십시오.

  • 구체 서브클래스는 Abstract 특성 없이 추상 속성을 재정의해야 합니다.

  • 구체 서브클래스는 SetAccess 특성과 GetAccess 특성에 추상 슈퍼클래스에서 이들 특성에 사용한 것과 동일한 값을 사용해야 합니다.

  • 추상 속성은 액세스 메서드를 정의할 수 없으며 초기값을 지정할 수 없습니다. 구체적인 속성을 정의하는 서브클래스는 액세스 메서드를 생성하고 초기값을 지정할 수 있습니다.

액세스 메서드에 대한 자세한 내용은 속성 액세스 메서드 항목을 참조하십시오.

클래스가 추상 클래스인지 여부 확인하기

meta.class 객체의 Abstract 속성을 쿼리하여 클래스가 추상 클래스인지 여부를 확인할 수 있습니다. 예를 들어, AbsClass가 다음과 같이 두 개의 추상 메서드를 정의한다고 가정하겠습니다.

classdef AbsClass
   methods(Abstract)
      result = absMethodOne(obj)
      output = absMethodTwo(obj)
   end
end

meta.classAbstract 속성의 논리값을 사용하여 클래스가 추상 클래스인지 여부를 확인할 수 있습니다.

mc = ?AbsClass;
if ~mc.Abstract
   % not an abstract class
end

추상 멤버 이름 표시

meta.abstractDetails 함수를 사용하여 추상 속성 또는 추상 메서드의 이름, 정의 클래스의 이름을 표시할 수 있습니다.

meta.abstractDetails('AbsClass');
Abstract methods for class AbsClass:
   absMethodTwo   % defined in AbsClass
   absMethodOne   % defined in AbsClass

상속된 추상 속성 및 추상 메서드 찾기

meta.abstractDetails 함수는 상속된 추상 속성 또는 추상 메서드 중 서브클래스에서 아직 구현되지 않은 것들의 이름을 정의 클래스와 함께 반환합니다. 서브클래스를 구체 클래스로 정의하려고 하며 이 서브클래스가 상속하는 추상 멤버를 결정해야 하는 경우 이 함수를 사용하십시오.

예를 들어, 이전 섹션에서 정의한 AbsClass 클래스의 서브클래스를 생성한다고 가정하겠습니다. 이 경우, 서브클래스가 AbsClass에 정의된 추상 메서드 중 하나만 구현합니다.

classdef SubAbsClass < AbsClass
% Does not implement absMethodOne
% defined as abstract in AbsClass
   methods
      function out = absMethodTwo(obj)
         ...
      end
   end
end

meta.abstractDetails를 사용하여 상속된 모든 클래스 멤버를 구현했는지 확인합니다.

meta.abstractDetails(?SubAbsClass)
Abstract methods for class SubAbsClass:
   absMethodOne   % defined in AbsClass

SubAbsClass 클래스가 AbsClass에 정의된 absMethodOne 메서드를 구현하지 않았기 때문에 추상 클래스가 됩니다.

msub = ?SubAbsClass;
msub.Abstract
ans =

     1

AbsClass에 정의된 두 메서드를 모두 구현하면 서브클래스가 구체 클래스가 됩니다.

관련 항목