Main Content

메서드 호출

MATLAB® 클래스는 메서드 호출에서 점 구문과 함수 구문을 모두 지원합니다. 이 항목에서는 두 구문을 보여주고 MATLAB에서 호출할 메서드를 어떻게 결정하는지 설명합니다.

점 구문과 함수 구문

한 개의 인수 arg를 가진 비정적 메서드를 호출하려면 점 구문이나 함수 구문을 사용하십시오. 여기서 obj는 해당 메서드를 정의하는 클래스의 객체입니다.

obj.methodName(arg)
methodName(obj,arg)

예를 들어 dataSetSummary는 해당 데이터의 평균과 중앙값 및 범위와 함께 숫자형 데이터 집합을 저장합니다. 이 클래스는 2개의 메서드를 정의합니다. showDataSet는 데이터 속성에 저장된 현재 데이터를 표시하고, newDataSetdata의 현재 값을 바꾸고 그 데이터의 평균과 중앙값 및 범위를 계산합니다.

classdef dataSetSummary
    properties (SetAccess=private)
        data {mustBeNumeric}
        dataMean
        dataMedian
        dataRange
    end

    methods
        function showDataSet(obj)
            disp(obj.data)
        end
        function obj = newDataSet(obj,inputData)
            obj.data = inputData;
            obj.dataMean = mean(inputData);
            obj.dataMedian = median(inputData);
            obj.dataRange = range(inputData);
        end
    end
end

dataSetSummary의 인스턴스를 만들고 newDataSet를 호출하여 데이터를 객체에 추가합니다. 점 구문을 사용하여 newDataSet를 호출합니다. dataSetSummary가 값 클래스이므로, 결과를 다시 원래 변수에 할당하여 변경 내용을 유지합니다.

a = dataSetSummary;
a = a.newDataSet([1 2 3 4])
a = 

  dataSetSummary with properties:

          data: [1 2 3 4]
      dataMean: 2.5000
    dataMedian: 2.5000
     dataRange: 3

showDataSet 메서드를 호출합니다. 하지만 이번 호출에는 함수 구문을 사용합니다.

showDataSet(a)
     1     2     3     4

표현식으로 메서드 이름 참조하기

표현식을 괄호로 묶어 동적으로 클래스 메서드를 호출할 수 있습니다.

obj.(expression)

이 표현식은 메서드의 이름에 해당하는 문자형 벡터 또는 string형이어야 합니다. 예를 들어 dataSetSummary 클래스의 객체 a에 대해 다음 두 명령문은 동등합니다.

a.showDataSet
a.("showDataSet")

이 기법은 함수 구문을 사용할 때는 해당되지 않습니다.

메서드 호출 결과의 요소 참조하기

객체 속성이나 구조체 필드 이름처럼 점 인덱싱이 정의되어 있는 값을 반환하는 메서드라면 그러한 메서드의 결과에 점 인덱싱을 사용할 수 있습니다. 예를 들어, 구조체에 저장된 모든 데이터를 반환하는 새 메서드 returnSummarydataSetSummary 클래스에 추가해 보겠습니다.

function outStruct = returnSummary(obj)
   outStruct = struct("Data",obj.data,...
                      "Mean",obj.dataMean,...
                      "Median",obj.dataMedian,...
                      "Range",obj.dataRange);
end

returnSummary를 호출하고 점 인덱싱을 사용하여 데이터 세트의 중앙값을 반환합니다.

a.returnSummary.Median
ans =

    2.5000

함수 호출 결과의 요소를 참조하는 방법에 대한 자세한 내용은 함수 호출 결과의 요소 참조하기 항목을 참조하십시오.

호출할 메서드 결정하기

메서드 호출에 점 구문이 사용되는 경우 MATLAB은 점의 왼쪽에 있는 객체의 클래스로 정의된 메서드를 호출합니다. 예를 들어, classAclassB가 모두 plus라는 메서드를 정의하는 경우, 다음 코드는 항상 classA로 정의된 plus 메서드를 호출합니다.

A = classA;
B = classB;
A.plus(B)

그 외 다른 인수는 고려되지 않습니다. 다른 인수의 메서드는 호출되지 않으며 함수도 호출되지 않습니다.

그 외 다른 구문에서 MATLAB은 가능한 다양한 버전의 연산자 또는 함수 중 어떤 것을 호출해야 할지를 주어진 상황에서 결정해야 합니다. 디폴트 동작은 가장 왼쪽에 있는 인수와 연결된 메서드를 호출하는 것입니다. 다음 두 명령문에서는 classA로 정의된 plus 메서드가 호출됩니다.

objA + objB
plus(objA,objB)

하지만 이 디폴트 동작은 한 객체가 다른 객체보다 우선할 경우 변경될 수 있습니다.

객체의 우선 순위

메서드 디스패치에 있어 클래스의 객체는 클래스의 정의 방법에 따라 다른 객체보다 우선할 수 있습니다.

  • classdef 구문을 사용하여 정의된 클래스는 다음 MATLAB 클래스보다 우선합니다.

    double, single, int64, uint64, int32, uint32, int16, uint16, int8, uint8, char, string, logical, cell, struct, function_handle.

  • classdef 구문을 사용하여 정의된 클래스는 InferiorClasses 특성을 사용하여 다른 클래스에 대한 상대적 우선 순위를 지정할 수 있습니다.

Representing Polynomials with Classes 항목에서 DocPolynom 클래스는 DocPolynom 객체를 더할 수 있는 plus 메서드를 정의합니다. DocPolynom 인스턴스를 생성합니다.

p = DocPolynom([1 0 -2 -5])
p =
    x^3 - 2*x - 5

다음 명령문은 double형을 DocPolynom 인스턴스에 더합니다. double1 + p에서 가장 왼쪽에 있는 인수이지만 DocPolynom 클래스가 내장된 double형 클래스보다 우선합니다. 다음 코드는 DocPolynom plus 메서드를 호출하여 다항식을 더합니다.

1 + p
ans =
    x^3 - 2*x - 4

또한 클래스 특성에 우선 순위가 낮은 클래스를 나열하여, classdef 구문으로 정의된 클래스의 상대적 우선 순위를 지정할 수도 있습니다. InferiorClasses 특성은 이 특성의 인수로 나열된 클래스보다 더 높은 우선 순위를 해당 클래스에 부여합니다. 다음과 같이 classdef 명령문에서 InferiorClasses 특성을 정의합니다.

classdef (InferiorClasses = {?class1,?class2}) myClass

이 특성에 의해 클래스의 상대적 우선 순위가 클래스 나열 순서로 정의되어 설정됩니다. 자세한 내용은 Class Precedence 항목을 참조하십시오.

관련 항목