Main Content

상속된 메서드 수정하기

슈퍼클래스 메서드를 수정하는 경우

클래스 설계를 통해 서브클래스 객체를 슈퍼클래스 메서드에 전달할 수 있습니다. 서브클래스 객체가 슈퍼클래스 객체이기 때문에 슈퍼클래스 메서드는 올바르게 실행됩니다. 하지만 서브클래스는 자체 버전의 슈퍼클래스 메서드를 구현할 수 있으며, MATLAB®은 서브클래스 객체를 전달할 때 이 메서드를 호출합니다.

서브클래스에 특화된 동작을 제공해야 하는 경우 서브클래스는 상속된 메서드를 재정의합니다(즉, 동일한 이름의 메서드를 구현함). 다음은 슈퍼클래스 메서드를 재정의하는 몇 가지 패턴입니다.

  • 서브클래스 메서드 내에서 슈퍼클래스 메서드를 호출하여 확장합니다. 서브클래스 메서드는 슈퍼클래스 메서드를 호출하는 것 외에도 서브클래스에 특화된 프로세스를 수행할 수 있습니다.

  • 슈퍼클래스 메서드에서 보호 메서드를 사용하여 프로시저의 일련의 단계를 구현합니다. 그런 다음, 서브클래스 메서드에서 퍼블릭 슈퍼클래스 메서드 내에서 호출되는 보호 메서드를 재정의하여 이 단계를 재구현합니다.

  • 서브클래스에서 동일한 이름의 메서드를 재정의하되, 다른 구현을 사용하여 서브클래스 객체에 대해 동일한 연산을 다르게 수행합니다.

  • 서브클래스에서 추상 슈퍼클래스 메서드를 구현합니다. 추상 슈퍼클래스는 구현 없이 메서드를 정의할 수 있으며 서브클래스를 사용하여 구현을 제공할 수 있습니다. 자세한 내용은 인터페이스 슈퍼클래스 정의하기 항목을 참조하십시오.

슈퍼클래스 메서드를 재정의하는 서브클래스 메서드는 슈퍼클래스 메서드가 정의한 것과 동일한 Access 특성 값을 정의해야 합니다.

슈퍼클래스 메서드 확장하기

서브클래스 메서드에서 동일한 이름의 슈퍼클래스 메서드를 호출하면 슈퍼클래스 메서드에 영향을 주지 않고 서브클래스 객체에 대한 슈퍼클래스 메서드를 확장할 수 있습니다.

예를 들어, 슈퍼클래스와 서브클래스 모두 foo라는 메서드를 정의한다고 가정하겠습니다. 서브클래스 메서드는 슈퍼클래스 메서드를 호출하고 슈퍼클래스 메서드에 대한 호출과 함께 다른 단계를 수행합니다. 이 서브클래스 메서드는 슈퍼클래스의 일부가 아닌 서브클래스에 특화된 부분에 대해 연산을 수행할 수 있습니다.

예를 들어, 아래 서브클래스는 슈퍼클래스의 foo 메서드를 호출하는 foo 메서드를 정의합니다.

classdef Sub < Super
   methods
      function foo(obj)
         % preprocessing steps
          ...
         foo@Super(obj);
         % postprocessing steps
          ...
      end
   end
end

서브클래스에서 슈퍼클래스 프로세스 재구현하기

슈퍼클래스 메서드는 각 단계에 대한 메서드(일반적으로 step 메서드의 Access 특성은 protected로 설정됨)를 사용하여 일련의 단계에서 실행되는 프로세스를 정의할 수 있습니다. 이 패턴(템플릿 메서드라고도 함)을 사용하면 서브클래스 역시 프로세스의 개별 단계를 구현하는 자체 버전의 보호 메서드를 생성할 수 있습니다. 이 프로세스는 서브클래스에 특화되어 있습니다.

다음과 같이 이 기법을 구현하십시오.

classdef Super
   methods (Sealed)
      function foo(obj)
         step1(obj) % Call step1
         step2(obj) % Call step2
         step3(obj) % Call step3
      end
   end
   methods (Access = protected)
      function step1(obj)
         % Superclass version
      end
      function step2(obj)
         % Superclass version
      end
      function step3(obj)
         % Superclass version
      end
   end
end

서브클래스는 foo 메서드를 재정의하지 않습니다. 대신 일련의 단계(step1(obj), step2(obj), step3(obj))를 수행하는 보호 메서드만 재정의합니다. 이 기법을 사용하면 서브클래스는 각 단계에서 실행되는 동작을 특화할 수 있지만, 이 프로세스에서 수행되는 단계의 순서를 제어하지는 않습니다. 슈퍼클래스의 foo 메서드에 서브클래스 객체를 전달하면 MATLAB이 디스패치 규칙으로 인해 서브클래스의 step 메서드를 호출합니다. 메서드 디스패치에 대한 자세한 내용은 메서드 호출 항목을 참조하십시오.

classdef Sub < Super
   ...
   methods (Access = protected)
      function step1(obj)
         % Subclass version
      end
      function step2(obj)
         % Subclass version
      end
      function step3(obj)
         % Subclass version
      end
      ...
   end
end

슈퍼클래스 메서드 재정의하기

서브클래스에서 슈퍼클래스 메서드를 완전히 재정의할 수 있습니다. 이 경우, 슈퍼클래스와 서브클래스 모두 이름이 동일한 메서드를 정의할 수 있습니다. 하지만 구현이 다르며 서브클래스 메서드가 슈퍼클래스 메서드를 호출하지 않습니다. 동일한 연산에서 슈퍼클래스와 서브클래스에 다른 구현이 필요한 경우에는 동일한 이름의 메서드의 독립적인 버전을 작성해야 할 수 있습니다.

classdef Super
   methods
      function foo(obj)
         % Superclass implementation
      end
   end
end
classdef Sub < Super
   methods
      function foo(obj)
         % Subclass implementation
      end
   end
end

서브클래스에서 추상 메서드 구현하기

추상 메서드는 구현을 갖지 않습니다. 추상 메서드를 상속하는 서브클래스는 서브클래스가 구체 클래스가 되도록 서브클래스에 특화된 구현을 제공해야 합니다. 자세한 내용은 추상 클래스 및 클래스 멤버 항목을 참조하십시오.

classdef Super
   methods (Abstract)
      foo(obj)
         % Abstract method without implementation
   end
end
classdef Sub < Super
   methods
      function foo(obj)
         % Subclass implementation of concrete method
      end
   end
end

관련 항목