Main Content

연산자 오버로드

연산자를 오버로드하는 이유

클래스에 적합한 연산자를 구현하여 클래스의 객체를 MATLAB® 언어에 통합할 수 있습니다. 예를 들어, 숫자형 데이터를 포함하는 객체는 사용자가 산술 표현식에서 그 객체를 사용할 수 있도록 +, *, - 등의 산술 연산을 정의할 수 있습니다. 관계 연산자를 구현하여 switch 문 및 if 문과 같은 조건문에서 객체를 사용할 수 있습니다.

연산자를 정의하는 방법

클래스의 객체에 사용할 MATLAB 연산자를 구현할 수 있습니다. 연산자를 구현하려면 관련 클래스 메서드를 정의하십시오.

연산자마다 연결된 함수가 있습니다(예: + 연산자에는 plus.m 함수가 연결됨). 적합한 이름으로 클래스 메서드를 생성하여 연산자를 구현할 수 있습니다. 이 메서드는 구현할 연산에 적합한 단계를 모두 수행할 수 있습니다.

연산자 및 연결된 함수 이름의 목록은 MATLAB 연산자 및 관련 함수 항목을 참조하십시오.

연산에서 객체의 우선 순위

사용자 정의 클래스가 내장 클래스보다 우선 순위가 높습니다. 예를 들어, qdouble형 클래스의 객체이고 p가 사용자 정의 클래스라고 가정하겠습니다. 두 표현식 모두 사용자 정의 클래스가 존재하는 경우 그 클래스의 plus 메서드에 대한 호출을 생성합니다.

q + p 
p + q

그 메서드가 double형 클래스의 객체와 사용자 정의 클래스를 더할 수 있는지 여부는 메서드가 구현된 방식에 따라 결정됩니다.

pq가 서로 다른 클래스의 객체이면 MATLAB이 우선 순위 규칙을 적용하여 사용할 메서드를 결정합니다.

MATLAB이 호출할 메서드를 결정하는 방법에 대한 자세한 내용은 메서드 호출 항목을 참조하십시오.

연산자 우선 순위

오버로드된 연산자는 해당 연산자에 대한 원래 MATLAB 우선 순위를 유지합니다. 연산자 우선 순위에 대한 자세한 내용은 연산자 우선 순위 항목을 참조하십시오.

예제 구현 — 더하기가 가능한 객체

Adder 클래스는 plus 메서드를 정의하여 이 클래스의 객체에 대한 더하기를 구현합니다. AdderNumericData 속성값의 더하기로 객체의 더하기를 정의합니다. plus 메서드는 Adder 객체를 생성하고 반환합니다. 이 객체의 NumericData 속성값이 더하기의 결과입니다.

Adder 클래스는 lt 메서드를 정의하여 보다 작음 연산자(<)도 구현합니다. lt 메서드는 각 객체의 NumericData 속성값을 비교한 후 논리값을 반환합니다.

classdef Adder
   properties
      NumericData
   end
   methods
      function obj = Adder(val)
         obj.NumericData = val;
      end
      function r = plus(obj1,obj2)
         a = double(obj1);
         b = double(obj2);
         r = Adder(a + b);
      end
      function d = double(obj)
         d = obj.NumericData;
      end
      function tf = lt(obj1,obj2)
         if obj1.NumericData < obj2.NumericData
            tf = true;
         else
            tf = false;
         end
      end
   end
end

double형 변환기를 사용하면 숫자형 값을 Adder 객체에 더하고 클래스의 객체에 대한 덧셈을 수행할 수 있습니다.

a = Adder(1:10)
a = 

  Adder with properties:

    NumericData: [1 2 3 4 5 6 7 8 9 10]

두 객체를 더합니다.

a + a
ans = 

  Adder with properties:

    NumericData: [2 4 6 8 10 12 14 16 18 20]

객체에 double형으로 형변환할 수 있는 값을 더합니다.

b = uint8(255) + a
b = 

  Adder with properties:

    NumericData: [256 257 258 259 260 261 262 263 264 265]

< 연산자를 사용하여 객체 ab를 비교합니다.

a < b
ans =

     1

클래스가 클래스 설계를 구현하는 데 필요한 오류 검사를 제공할 수 있도록 하십시오.

MATLAB 연산자 및 관련 함수

다음 표에는 MATLAB 연산자에 대한 함수 이름이 나와 있습니다. 배열에 사용할 연산자(스칼라 확장, 벡터화된 산술 연산 등)를 구현하는 경우에도 인덱싱 및 결합을 수정해야 할 수 있습니다. 다음 표에 나와 있는 링크를 사용하여 각 함수에 대한 구체적인 정보를 확인할 수 있습니다.

연산

정의할 메서드

설명

a + b

plus(a,b)

이진 덧셈

a - b

minus(a,b)

이진 뺄셈

-a

uminus(a)

단항 마이너스

+a

uplus(a)

단항 플러스

a.*b

times(a,b)

요소별 곱셈

a*b

mtimes(a,b)

행렬 곱셈

a./b

rdivide(a,b)

요소별 오른쪽 나눗셈

a.\b

ldivide(a,b)

요소별 왼쪽 나눗셈

a/b

mrdivide(a,b)

행렬 오른쪽 나눗셈

a\b

mldivide(a,b)

행렬 왼쪽 나눗셈

a.^b

power(a,b)

요소별 거듭제곱

a^b

mpower(a,b)

행렬 거듭제곱

a < b

lt(a,b)

보다 작음

a > b

gt(a,b)

보다 큼

a <= b

le(a,b)

보다 작거나 같음

a >= b

ge(a,b)

보다 크거나 같음

a ~= b

ne(a,b)

같지 않음

a == b

eq(a,b)

등식

a & b

and(a,b)

논리 AND

a | b

or(a,b)

논리 OR

~a

not(a)

논리 NOT

a:d:b

a:b

colon(a,d,b)

colon(a,b)

콜론 연산자

a'

ctranspose(a)

켤레 복소수 전치

a.'

transpose(a)

행렬 전치

[a b]

horzcat(a,b,...)

가로 결합

[a; b]

vertcat(a,b,...)

세로 결합

a(s1,s2,...sn)

subsref(a,s)

첨자를 사용한 참조

a(s1,...,sn) = b

subsasgn(a,s,b)

첨자를 사용한 값 할당

b(a)

subsindex(a)

첨자 인덱스

관련 항목