Main Content

메서드 구문

이 항목에서는 methods...end 블록을 사용하여 MATLAB®에서 클래스 메서드를 정의하는 방법을 설명하고 메서드 인수 유효성 검사에 대해 소개합니다. 또한 일반 메서드라고도 하는 비정적 구체 메서드에 대해서도 집중적으로 설명합니다. 그 외 유형의 메서드에 대해서는 다음 항목을 참조하십시오.

메서드 정의 블록

methodsend 키워드는 동일한 특성 설정을 갖는 하나 이상의 클래스 메서드를 정의합니다. 이러한 메서드 자체는 MATLAB 함수 블록을 사용하여 정의됩니다. 일반 메서드의 블록을 정의하기 위한 구문은 다음과 같습니다.

methods (attributes)
   function method1(obj,arg1,...)
      ...
   end
   function method2(obj,arg1,...)
      ...
   end
   ...
end

정적 메서드를 제외하고 MATLAB 메서드에 명시적으로 클래스의 객체를 전달해야 합니다.

예를 들어, 다음 클래스는 한 개의 퍼블릭 속성과 두 개의 퍼블릭 메서드를 정의합니다. 각 메서드는 두 개의 입력 인수를 취하는데, 하나는 객체 자체이며 다른 하나는 사용자가 제공한 인수 inputArg입니다. 이들 메서드는 클래스 속성 Property1 값과 입력 인수 값의 곱과 몫을 계산합니다.

classdef methodDemo
   properties
      Property1
   end
   methods
      function prod = propMultiply(obj,inputArg)
         prod = obj.Property1*inputArg;
      end
      function quotient = propDivide(obj,inputArg)
         quotient = obj.Property1/inputArg;
      end
   end
end

서로 다른 특성을 가진 여러 개의 메서드 블록을 정의할 수도 있습니다. 이 예제에서 첫 번째 메서드는 보호 메서드이고, 두 번째 메서드는 프라이빗 메서드입니다. 자세한 내용은 메서드 특성 항목을 참조하십시오.

classdef attributeDemo
   methods (Access = protected)
      function out = method1(obj,inputArg)
         ...
      end
   end
   methods (Access = private)
      function out = method2(obj,inputArg)
          ...
      end
   end
end

메서드 인수 유효성 검사

메서드 입력 인수와 출력 인수에 대한 제한을 정의할 수 있습니다. 메서드 인수에 대한 유효성을 검사하려면 함수를 사용할 때와 동일한 방식으로 메서드에 arguments 블록을 추가하십시오. 자세한 내용은 arguments 항목을 참조하십시오.

입력 인수 유효성 검사

입력 인수 유효성 검사를 사용하여 메서드 입력 인수의 크기, 클래스 및 다른 특성을 제한할 수 있습니다. 입력 인수 유효성 검사를 위한 구문은 다음과 같습니다.

arguments
   argName1 (dimensions) class {validators} = defaultValue
   ...
end

  • (dimensions) — 입력 크기로, 두 개 이상의 숫자가 쉼표로 구분된 목록으로 지정됩니다(예: (1,2)).

  • class — 클래스로, double형 같은 클래스 이름 또는 사용자 정의 클래스 이름으로 지정됩니다.

  • {validators}mustBeNumeric, mustBeScalarOrEmpty 같이 쉼표로 구분된 유효성 검사 함수 목록으로, 중괄호로 묶습니다. 유효성 검사 함수 목록은 인수 유효성 검사 함수 항목을 참조하십시오.

  • defaultValue — 디폴트 값은 지정된 크기와 유형, 유효성 검사 규칙을 따라야 합니다.

입력 인수 유효성 검사 구문의 요소에 대한 전체 설명을 보려면 arguments 항목을 참조하십시오.

입력 인수 유효성 검사는 퍼블릭 액세스를 갖는 메서드에 유용합니다. 해당 메서드의 호출자로부터 오는 인수 값의 유형을 제한하면 메서드 본문이 실행되기 전에 오류를 방지할 수 있습니다. 예를 들어 Rectangle 클래스는 사각형의 위치(XY)와 너비, 높이를 지정하는 속성으로 좌표 평면에 사각형을 표시합니다.

classdef Rectangle
    properties
        X (1,1) double {mustBeReal} = 0
        Y (1,1) double {mustBeReal} = 0
        Width (1,1) double {mustBeReal} = 0
        Height (1,1) double {mustBeReal} = 0
    end
    
    methods
        function R = enlarge(R,x,y)
            arguments (Input)
                R (1,1) Rectangle
                x (1,1) {mustBeNonnegative}
                y (1,1) {mustBeNonnegative}
            end
            arguments (Output)
                R (1,1) Rectangle
            end
            R.Width = R.Width + x;
            R.Height = R.Height + y;
        end
    end
end

enlarge 메서드는 사용자 입력값 xy를 각각 WidthHeight에 더해 사각형의 높이와 너비를 늘립니다. 이 메서드의 용도는 사각형 하나를 확대하는 것이므로, 유효성 검사는 (1,1) 크기 제한을 통해 입력 인수를 스칼라 값으로 제한하고 mustBeNonnegative를 통해 음이 아닌 숫자형 값으로 제한합니다.

클래스를 인스턴스화하고, enlarge에 대한 입력값 5-1을 사용하여 enlarge를 호출합니다. 인수 유효성 검사에서 오류를 반환합니다.

rect1 = Rectangle;
rect1.enlarge(5,-1))
Error using Rectangle/enlarge
 rect1.enlarge(5,-1)
                 ↑
Invalid argument at position 2. Value must be nonnegative.

입력 인수 블록에 대한 (Input) 특성은 선택 사항입니다. 하지만 단일 메서드에 입력 인수 블록과 출력 인수 블록을 모두 정의할 경우 가독성을 위해 사용하는 것이 좋습니다. MATLAB은 두 특성이 모두 없는 인수 블록을 입력 인수 블록으로 해석합니다.

출력 인수 유효성 검사

출력 인수 유효성 검사를 위한 구문은 (Output)을 인수 블록의 특성으로 지정해야 하고 디폴트 값을 설정할 수 없다는 점을 제외하면, 입력 유효성 검사과 동일합니다.

arguments (Output)
   argName1 (dimensions) class {validators}
   ...
end

출력 인수 유효성 검사 구문에 대한 전체 설명을 보려면 arguments 항목을 참조하십시오.

출력 인수 유효성 검사는 출력 유형을 바꾸어 놓을 수 있는 향후 코드 변경에 대해 안전 장치 역할을 할 뿐만 아니라, 클래스 작성자가 메서드에서 반환되는 출력값 유형을 문서화할 수 있게 해 줍니다. 예를 들어 Rectangleenlarge 메서드는 출력 인수 유효성 검사를 사용하여, 객체 메서드가 Rectangle의 스칼라 인스턴스를 반환하도록 보장합니다.

arguments (Output)
   R (1,1) Rectangle
end

enlarge가 객체 자체가 아닌 Rectangle의 차원만 반환하도록 이후에 수정되는 경우 출력 유효성 검사는 이 같은 잠재 실수를 잡아내는 데 도움이 됩니다.

메서드 유효성 검사에 대한 특별 고려 사항

클래스 메서드에 대한 인수 유효성 검사는 함수에 대한 인수 유효성 검사와 거의 유사하게 작동하지만, 메서드에만 고유하게 적용되는 인수 유효성 검사의 몇 가지 측면이 있습니다.

  • 별도의 파일에 정의된 메서드에 대한 메서드 프로토타입이 classdef 파일에 포함되어 있는 경우, 그러한 메서드에 대해 정의하려는 arguments 블록은 별도의 파일에 정의해야 합니다. 별도의 파일에 메서드를 정의하는 방법에 대한 자세한 내용은 개별 파일 내 메서드 항목을 참조하십시오.

  • 서브클래스 메서드는 인수 유효성 검사를 상속하지 않습니다. 슈퍼클래스 메서드를 재정의하는 서브클래스 메서드에서 인수 유효성 검사를 유지하려면 서브클래스 메서드에서 슈퍼클래스 메서드의 인수 유효성 검사를 반복하십시오.

  • 추상 메서드는 arguments 블록을 정의할 수 없으므로 인수 유효성 검사를 지원하지 않습니다. 자세한 내용은 추상 클래스 및 클래스 멤버 항목을 참조하십시오.

  • 핸들 클래스 소멸자 메서드는 인수 유효성 검사를 사용할 수 없습니다. 핸들 클래스에서 핸들 객체가 연결할 수 없는 상태가 되거나 delete 호출로 명시적으로 삭제되는 경우 MATLAB에서 delete라는 소멸자 메서드가 호출됩니다. 소멸자는 정확히 한 개의 입력값을 가져야 하고 출력값과 인수 유효성 검사는 없어야 합니다. MATLAB은 그 외 다른 방식으로 정의된 메서드를 일반 메서드로 취급하며 그러한 메서드를 소멸자로 사용하지 않습니다. 자세한 내용은 핸들 클래스 소멸자 항목을 참조하십시오.

참고 항목

관련 항목