이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
추상 클래스 및 클래스 멤버
추상 클래스
추상 클래스는 클래스 그룹에 공통되지만 각 클래스 내에서 고유하게 구현되어야 하는 기능을 설명하는 데 유용합니다.
추상 클래스는 관련 서브클래스의 그룹에 대한 기반(즉, 슈퍼클래스) 역할을 합니다. 추상 클래스는 서브클래스가 구현하는 추상 속성 및 추상 메서드를 정의할 수 있습니다. 각 서브클래스는 특정 요구 사항을 지원하는 방식으로 구체 속성 및 구체 메서드를 구현할 수 있습니다.
구체 서브클래스 구현하기
서브클래스가 구체 클래스가 되려면 상속된 모든 추상 속성과 추상 메서드를 구현해야 합니다. 그렇지 않으면, 서브클래스도 추상 클래스가 됩니다.
MATLAB®은 서브클래스가 구체 메서드를 구현할 때 동일한 시그니처 또는 특성을 사용하도록 강제하지 않습니다.
추상 클래스는 다음을 수행할 수 있습니다.
추상이 아닌 속성과 메서드를 정의할 수 있습니다.
상속을 통해 구체 멤버를 전달할 수 있습니다.
추상 멤버를 정의할 필요가 없습니다.
추상 클래스로 클래스 선언하기
다음 선언이 있는 클래스는 추상 클래스입니다.
Abstract
클래스 특성추상 메서드
추상 속성
추상 클래스의 서브클래스가 상속된 모든 추상 메서드 또는 추상 속성에 대해 구체적인 구현을 정의하지 않는다면 이 클래스도 추상 클래스가 됩니다.
추상 클래스
classdef
문에서 클래스를 추상 클래스로 선언할 수 있습니다.
classdef (Abstract) AbsClass ... end
Abstract
클래스 특성을 선언하는 클래스의 경우 다음을 참고하십시오.
구체 서브클래스는 추상으로 선언된 속성 또는 메서드를 재정의해야 합니다.
추상 클래스는 추상 메서드 또는 추상 속성을 정의할 필요가 없습니다.
추상 메서드 또는 추상 속성을 정의하면 MATLAB이 클래스의 Abstract
특성을 자동으로 true
로 설정합니다.
추상 메서드
다음과 같이 추상 메서드를 정의할 수 있습니다.
methods (Abstract) abstMethod(obj) end
Abstract
메서드 특성을 선언하는 메서드의 경우 다음을 참고하십시오.
function...end
블록을 사용하여 추상 메서드를 정의하지 마십시오. 메서드 시그니처만 사용해야 합니다.추상 메서드는 추상 클래스에 구현을 갖지 않습니다.
구체 서브클래스는 동일한 개수의 입력 인수와 출력 인수를 지원해야 할 필요가 없으며 동일한 인수 이름을 사용할 필요도 없습니다. 하지만 서브클래스가 자기 자신의 메서드를 구현할 때는 일반적으로 동일한 시그니처를 사용합니다.
추상 메서드는
arguments
블록을 정의할 수 없습니다.
추상 속성
다음과 같이 추상 속성을 정의할 수 있습니다.
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.class
의 Abstract
속성의 논리값을 사용하여 클래스가 추상 클래스인지 여부를 확인할 수 있습니다.
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
에 정의된 두 메서드를 모두 구현하면 서브클래스가 구체 클래스가 됩니다.