Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

클래스 메서드와 함수 정의하기

Methods 블록

메서드를 classdef 블록 내부의 methods 블록 내에 MATLAB® 함수로 정의합니다. 생성자 메서드는 클래스와 동일한 이름을 가지며 클래스의 초기화된 객체를 반환합니다. 해당 인스턴스에 고유한 속성값을 사용하여 객체를 생성하려면 클래스 생성자의 속성에 값을 할당하십시오. end 문을 사용하여 모든 메서드 함수를 종료합니다.

classdef ClassName
   properties
      PropertyName
   end
   methods
      function obj = ClassName(arg1,...)
         obj.PropertyName = arg1;
         ...
      end
      function ordinaryMethod(obj,arg1,...)
         ...
      end
   end
   methods (Static)
      function staticMethod(arg1,...)
         ...
      end
   end
end

메서드 호출 구문

MATLAB은 모든 메서드에 전달되는 특수한 숨겨진 클래스 객체가 없다는 점에서 C++, Java® 같은 언어와 다릅니다. 사용자는 메서드에 명시적으로 클래스의 객체를 전달해야 합니다. 가장 왼쪽의 인수가 클래스 객체일 필요가 없으며 인수 목록에 여러 개의 객체를 포함할 수 있습니다. MATLAB은 상위 인수의 클래스에서 정의한 메서드로 디스패치합니다. 자세한 내용은 메서드 호출 항목을 참조하십시오.

메서드는 호출될 때 MATLAB 경로에 있어야 합니다. 예를 들어, 객체를 생성한 후 현재 폴더를 메서드 파일이 표시되지 않는 폴더로 변경하면 해당 메서드를 호출할 때 오류가 발생합니다.

MATLAB 코드에는 항상 대/소문자를 구분하는 메서드 이름을 사용해야 합니다.

일반 메서드

일반 메서드는 MATLAB 함수 구문 또는 점 표기법을 사용하여 호출합니다. 예를 들어, ordinaryMethod를 정의하는 클래스가 있다고 가정하겠습니다. 정의 클래스의 객체 및 필요한 인수를 모두 전달합니다.

classdef MyClass
   methods
      function out = ordinaryMethod(obj,arg1)
      ...
      end
   end
end

클래스의 객체 obj와 두 구문 중 하나를 사용하여 ordinaryMethod를 호출합니다.

obj = MyClass;
r = ordinaryMethod(obj,arg1);
r = obj.ordinaryMethod(arg1);

정적 메서드

정적 메서드에는 클래스의 객체가 필요하지 않습니다. 정적 메서드를 호출하려면 MATLAB이 어떠한 클래스가 메서드를 정의하는지를 파악할 수 있도록 메서드 이름 앞에 클래스 이름을 추가해야 합니다.

classdef MyClass
   methods (Static)
      function out = staticMethod(arg1)
      ...
      end
   end
end

구문 classname.methodname을 사용하여 staticMethod를 호출합니다.

r = MyClass.staticMethod(arg1);

클래스의 객체가 필요하지 않은 메서드에 대한 자세한 내용은 정적 메서드 항목을 참조하십시오.

프라이빗 메서드

Access 메서드 특성을 사용하여 프라이빗 메서드를 생성할 수 있습니다. 프라이빗 폴더를 사용할 필요는 없습니다.

메서드 특성 목록은 메서드 특성 항목을 참조하십시오.

메서드에 대한 자세한 정보

메서드

클래스 관련 함수

클래스 정의(classdef)를 담은 파일에서 클래스 메서드가 아닌 함수를 정의할 수 있습니다. classdef - end 블록 외부에 로컬 함수를 정의하되, 클래스 정의와 동일한 파일에 정의하십시오. classdef 파일에 정의된 함수는 로컬 함수처럼 동작합니다. 동일한 파일 내 어디서나 이 함수를 호출할 수 있지만 함수를 정의한 파일 외부에서는 함수가 보이지 않습니다.

classdef 파일에 정의된 로컬 함수는 그 파일 내에서만 사용하는 유틸리티 함수에 유용합니다. 이 함수는 클래스의 인스턴스인 인수를 받거나 반환할 수 있지만, 일반 메서드의 경우처럼 반드시 그럴 필요는 없습니다. 예를 들어, 다음 코드는 classdef 블록 외부에 myUtilityFcn을 정의합니다.

classdef MyClass
   properties
      PropName
   end
   methods
      function obj = MyClass(arg1)
         obj.PropName = arg1;
      end 
   end 
end % End of classdef

function myUtilityFcn
   ...
end

또한, 패키지 함수를 생성할 수도 있습니다. 패키지 함수를 호출할 때는 패키지 이름을 사용해야 합니다.

함수와 연산자를 오버로드하는 방법

오버로드하려는 함수와 동일한 이름으로 클래스 메서드를 정의하여 클래스에 대한 MATLAB 함수를 오버로드할 수 있습니다. MATLAB은 클래스의 인스턴스로 함수가 호출되는 경우 클래스 메서드로 디스패치합니다.

적합한 이름으로 클래스 메서드를 정의하여 MATLAB 산술 연산자, 논리 연산자, 관계 연산자, 인덱싱 연산자를 오버로드할 수 있습니다.

핸들 클래스에 대해 정의된 연산 목록은 handle 클래스를 참조하십시오. handle에서 파생되는 모든 클래스는 이러한 메서드를 상속합니다.

별도의 파일에 메서드를 정의하는 규칙

다음 규칙은 별도의 파일에 정의되는 메서드에 적용됩니다.

  • 별도의 파일에 정의되는 메서드에 대한 특성을 지정하려면 classdef 파일의 methods 블록에 이 메서드를 선언하십시오. methods 블록에 특성 값을 지정합니다.

  • methods 블록이 사용된 경우, 해당 블록에 선언된 구문이 메서드의 function 라인과 일치해야 합니다.

  • 별도의 파일은 클래스(@) 폴더에 있어야 합니다.

  • 클래스 생성자 메서드는 classdef 파일에 정의해야 합니다. 생성자는 별도의 파일에 있을 수 없습니다.

  • 핸들 클래스 delete 메서드는 classdef 파일에 정의해야 합니다. delete 메서드는 별도의 파일에 있을 수 없습니다.

    다음을 포함하여 이름에 점을 사용하는 모든 함수는 classdef 파일에 정의해야 합니다.

    • 클래스가 패키지에 포함되어 있으므로 클래스 이름의 일부로 패키지 이름을 사용해야 하는 변환기 메서드

    • 속성 set 액세스 메서드 및 get 액세스 메서드

별도의 파일에 메서드를 정의하는 방법에 대한 자세한 내용은 개별 파일 내 메서드 항목을 참조하십시오.

관련 항목