주요 콘텐츠

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

코드 제안 및 코드 완성 사용자 지정하기

R2026a

함수 및 클래스에 맞게 코드 제안 및 코드 완성을 사용자 지정하려면 MATLAB®에 함수 시그니처에 관한 정보를 제공하십시오. 함수 시그니처는 함수에서 허용 가능한 구문과 데이터형을 설명합니다. MATLAB은 이 정보를 사용하여 편집기, 라이브 편집기, 명령 창에서 코드 제안 및 코드 완성을 표시합니다. JSON 형식 파일 functionSignatures.json에서 이 함수 정보를 정의합니다. MATLAB은 arguments 블록을 가진 함수에 대해 arguments 블록에 포함된 정보를 바탕으로 코드 완성 및 제안을 제공할 수 있습니다. 이 정보는 functionSignatures.json 파일이 없어도 사용할 수 있습니다. MATLAB Online에서는 코드 제안 및 코드 완성이 지원되지 않습니다.

MATLAB에서 함수 시그니처 정보를 감지할 수 있도록 하려면 함수 코드가 포함된 폴더 안에 있는 resources 폴더에 functionSignatures.json을 넣어야 합니다. 클래스 메서드 또는 네임스페이스 함수에 대한 정보를 정의하는 경우 가장 바깥쪽 클래스 또는 네임스페이스 폴더의 부모 폴더 안에 있는 resources 폴더에 functionSignatures.json을 넣어야 합니다. 예를 들어, myClass의 메서드에 대한 정보를 정의하려면 다음 클래스 및 네임스페이스 구조체의 myFolder 안에 있는 resources 폴더에 functionSignatures.json을 넣으십시오.

  myFolder/+myNamespace/@myClass
  myFolder/+myNamespace/+mySubnamespace/@myClass

클래스 또는 네임스페이스 폴더 바깥에 있는 클래스의 경우 클래스 코드가 포함된 폴더 안에 있는 resources 폴더에 functionSignatures.json을 넣으십시오. 동일한 파일에서 여러 함수에 대한 시그니처를 정의할 수 있습니다.

functionSignatures.json 파일에는 단일 JSON 객체가 포함됩니다. JSON은 중괄호를 사용하여 객체를 정의하고 객체를 이름-값 쌍 모음으로 참조합니다. 이러한 JSON term은 함수 시그니처 컨텍스트에서 오버로드되기 때문에 "이름" 대신 "속성"이 사용됩니다. functionSignatures.json의 JSON 객체에는 체계 버전(선택 사항)과 함수 객체 목록이 포함됩니다. 각 함수 객체는 시그니처 객체 목록을 포함하며 각 시그니처 객체는 인수 객체로 구성된 배열을 포함합니다. JSON은 대괄호를 사용하여 배열을 정의합니다.

Example functionSignatures.json file showing the function object property "functionName1" with one signature object property "inputs". The "inputs" signature object property has three argument objects named "A", "dim", and "nanflag".

체계 버전(선택 사항)을 지정하려면 _schemaVersion을 첫 번째 속성, 버전 번호를 이 속성의 값으로 사용하십시오. 버전 번호는 major#.minor#.patch# 형식의 JSON 문자열로 지정합니다. 여기에서 각 숫자는 음이 아닌 정수로 지정합니다. 현재 체계 버전은 1.0.0입니다. 파일에 체계 버전이 지정되어 있지 않은 경우, MATLAB은 버전을 1.0.0으로 가정합니다.

functionSignatures.json에 구문 오류가 있으면 MATLAB은 파일을 읽을 때 명령 창에 오류 메시지를 표시합니다. validateFunctionSignaturesJSON 함수를 사용하여 JSON 체계와 MATLAB 함수 시그니처 체계에 대해 functionSignatures.json 파일의 유효성을 검사합니다.

함수 객체

함수에 대한 정보를 정의하려면 함수 이름과 동일한 속성을 만드십시오. 속성값은 시그니처 객체입니다.

{
  "functionName1": { signatureObj1 },
  "functionName2": { signatureObj2 }
}

클래스 생성자, 클래스 메서드 또는 네임스페이스 함수에 대한 정보를 정의하려면 함수나 메서드의 전체 이름을 사용하십시오. 예를 들어, 클래스 생성자, 클래스 메서드 myMethod 및 네임스페이스 함수 myFunction을 정의해 봅니다.

{
  "myClass.myClass": { signatureObj },
  "myClass.myMethod": { signatureObj },
  "myNamespace.myFunction": { signatureObj }
}

동일한 속성(함수 이름 또는 메서드 이름)으로 여러 개의 함수 객체를 정의하면 동일한 함수 또는 메서드에 대해 여러 함수 시그니처를 정의할 수 있습니다. 자세한 내용은 여러 개의 시그니처 항목을 참조하십시오.

시그니처 객체

시그니처 객체는 함수의 입력 인수, 출력 인수, 지원되는 플랫폼을 정의합니다. platforms 속성을 제외한 각 속성의 값은 인수 객체로 구성된 배열입니다.

{
  "functionName1":
  {
     "inputs": [ argumentObj1, argumentObj2 ]
  }
}

JSON 파일에 myClass.myMethod와 같은 인스턴스 메서드를 지정하는 경우 inputs에 있는 요소 중 하나가 myClass의 객체여야 합니다. 일반적으로, 이 객체는 첫 번째 요소입니다. MATLAB에서는 점 표기법(b = myObj.myMethod(a)) 또는 함수 표기법(b = myMethod(myObj,a)) 구문을 사용하여 지정된 메서드를 호출할 때 이 메서드에 대한 코드 제안 및 코드 완성을 지원합니다.

JSON 파일의 각 시그니처에는 다음 속성이 포함될 수 있습니다.

속성설명값의 JSON 데이터형
inputs

함수 입력 인수 목록입니다. MATLAB은 코드 제안 및 코드 완성에 이 속성을 사용합니다.

인수 객체로 구성된 배열

outputs

함수 출력 인수 목록입니다. MATLAB은 더욱 정교한 코드 제안 및 코드 완성을 위해 이 속성을 사용합니다.

인수 객체로 구성된 배열

platforms

함수를 지원하는 플랫폼 목록입니다. 플랫폼이 함수를 지원하지 않는 경우, MATLAB은 사용자 지정 코드 제안 및 코드 완성을 제공하지 않습니다.

디폴트 값은 모든 플랫폼입니다. 목록의 요소는 computer 함수에서 반환된 archstr과 일치해야 합니다. 목록은 포괄적 또는 배타적일 수 있으나, 동시에 둘 다 될 수는 없습니다. 예제 값은 "win64,maca64" 또는 "-win64,-maca64"입니다.

쉼표로 구분된 값으로 구성된 문자열

인수 객체

인수 객체는 각 입력 인수와 출력 인수에 대한 정보를 정의합니다.

{
  "functionName1":
  {
     "inputs":
     [
        {"name":"in1",  "kind":"required", "type":["numeric"]},
        {"name":"in2",  "kind":"required", "type":["numeric","integer","scalar"]}
     ]
  }
}

JSON 파일에 입력값이 표시되는 순서는 중요합니다. 예를 들어, functionName1 함수를 호출할 때 in1은 in2 앞에 표시되어야 합니다.

각 인수 객체에는 다음 속성이 포함될 수 있습니다.

입력 인수 또는 출력 인수의 이름으로, JSON 문자열로 지정됩니다. 이 속성과 값은 필수 사항입니다. name 속성이 소스 코드의 인수 이름과 반드시 일치할 필요는 없지만 도움말 또는 문서와는 일치하는 것이 좋습니다.

예: "name":"myArgumentName"

인수의 유형으로, JSON 문자열로 지정되며 값은 다음 중 하나입니다. MATLAB은 kind 속성 값을 사용하여 함수 시그니처 내에 인수를 표시할 것인지 그리고 언제 표시할 것인지를 결정합니다.

값설명
required

이 인수는 필수이며 인수 위치는 시그니처 객체의 다른 필수 인수를 기준으로 합니다.

ordered

이 인수는 선택 사항이며 인수 위치는 시그니처 객체의 필수 인수와 앞에 포시된 선택적 인수를 기준으로 합니다.

namevalue

이 인수는 선택적 이름-값 인수입니다. 이름-값 인수는 함수 시그니처 끝에 위치하지만 원하는 대로 순서를 지정할 수 있습니다.

값이 required와 ordered인 인수가 함수 시그니처의 맨 앞에 표시되고 그다음에 namevalue 인수가 옵니다.

required 인수, ordered 인수, namevalue 인수가 가장 흔한 인수입니다. 또한, kind에 다음 값을 지정할 수도 있습니다.

  • positional – 이 인수는 인수 목록 끝에 위치하는 경우에는 선택적 인수지만, 후속 positional 인수를 지정해야 하는 경우에는 필수 인수가 됩니다. 모든 positional 인수는 namevalue 인수 앞에 required 인수와 ordered 인수와 함께 표시되어야 합니다.

  • flag – 이 인수는 선택적 인수이며, 상수 string형으로, 일반적으로 스위치로 사용됩니다. 예를 들어, 'ascend' 또는 'descend'입니다. 플래그는 함수 시그니처의 끝에 나옵니다. 모든 flag 인수는 namevalue 인수 앞에 표시되어야 합니다.

  • properties – 이 인수는 선택적 인수이며 다른 MATLAB 클래스의 설정 가능한 퍼블릭 속성을 지정하는 데 사용됩니다. 인수 객체 type 속성을 사용하여 클래스를 나타냅니다. 코드 제안에서 이러한 속성은 이름-값 인수로 표시됩니다. 모든 properties 인수는 시그니처의 마지막 인수가 되어야 합니다.

예: "kind":"required" 또는 "kind":"namevalue"

인수의 클래스 또는 특성으로, JSON 문자열, 목록 또는 목록으로 구성된 목록으로 지정됩니다.

type 속성은 인수의 클래스와 인수에 포함되어야 하는 특성을 정의할 수 있습니다.

  • 하나의 클래스 또는 특성을 일치시키려면 단일 JSON 문자열을 사용하십시오. 예를 들어, 인수가 숫자형이어야 하면 "type":"numeric"을 지정하십시오.

  • 모든 클래스 또는 모든 특성을 일치시키려면 JSON 문자열 목록을 사용하십시오. 예를 들어, 인수가 숫자형인 동시에 양수여야 하면 "type":["numeric", ">=0"]을 지정합니다.

  • 여러 클래스 또는 특성 중 하나라도 일치시키려면 JSON 문자열 목록으로 구성된 목록을 사용하십시오. 내부 목록의 경우, MATLAB은 값의 논리 AND 연산을 사용합니다. 외부 목록의 경우에 MATLAB은 값의 논리 OR 연산을 사용합니다. 예를 들어, 인수가 양수이거나 containers.Map 객체여야 하면 "type":[["numeric", ">=0"],["containers.Map"]]을 지정합니다.

값인수 설명
"classname"

classname 클래스의 객체여야 합니다. 여기에서 classname은 class 함수에서 반환된 클래스 이름입니다. 예를 들어, "double" 또는 "function_handle"입니다.

"choices=expression"

지정된 선택 사항 중 하나와 일치해야 합니다(대/소문자를 구분하지 않음). expression은 문자형 벡터로 구성된 셀, string형 배열 또는 정수 값으로 구성된 셀을 반환하는 유효한 MATLAB 표현식입니다. 예를 들어, "choices={'on','off'}" 또는 "choices={8, 16, 24}"를 사용합니다.

expression은 인수 목록에 표시되는 다른 입력 인수를 이름으로 참조할 수 있습니다. expression은 런타임에 실행되기 때문에 허용 가능한 선택 사항은 다른 입력 인수 값에 따라 동적으로 달라질 수 있습니다.

"file=*.ext,..."

특정 확장자를 갖는 기존 파일의 이름을 지정하는 string형 또는 문자형 벡터여야 합니다. 파일 이름은 현재 작업 폴더를 기준으로 합니다. 예를 들어, 현재 폴더의 모든 .m 파일과 .mlx 파일을 허용하려면 "file=*.m,*.mlx"를 사용하십시오. 현재 폴더의 모든 파일을 일치시키려면 "file"을 사용하십시오.

"folder"

현재 작업 폴더를 기준으로 한 기존 폴더의 이름으로, string형 또는 문자형 벡터여야 합니다.

"matlabpathfile=*.ext,..."

MATLAB 경로에 있는 기존 파일의 이름을 지정하는 string형 또는 문자형 벡터여야 합니다. 이 값에는 하나 이상의 파일 확장자가 필요합니다. 예를 들어, 경로에 있는 모든 .mat 파일을 허용하려면 "matlabpathfile=*.mat"를 사용하십시오.

"size=size1,size2,…,sizeN"

크기 제약 조건과 일치해야 합니다. 이 값에는 둘 이상의 차원이 필요합니다. 각 크기 차원은 허용 가능한 차원 크기를 나타내는 양의 정수 또는 어떤 크기도 허용하는 콜론이어야 합니다. 예를 들어, "size=2,:,2"는 인수에서 첫 번째 차원과 세 번째 차원의 크기를 2로 제한합니다.

"numel=integerValue"

지정된 개수의 요소가 있어야 합니다.

"nrows=integerValue"

지정된 개수의 행이 있어야 합니다.

"ncols=integerValue"

지정된 개수의 열이 있어야 합니다.

"numeric"

숫자형이어야 합니다. 이 숫자형 값은 'numeric' 클래스 범주를 갖는 isa 함수가 true를 반환하는 값입니다.

"logical"

숫자형 또는 논리형이어야 합니다.

"real"

실수 값 숫자형이거나 문자형 값 또는 논리값이어야 합니다.

"scalar"

스칼라여야 합니다.

"integer"

double형의 정수여야 합니다.

"square"정사각 행렬이어야 합니다.
"vector"열 벡터 또는 행 벡터여야 합니다.
"column"열 벡터여야 합니다.
"row"행 벡터여야 합니다.
"2d"2차원이어야 합니다.
"3d"4개 이상의 차원을 가질 수 없습니다.
"sparse"희소 형식이어야 합니다.
"positive"0보다 커야 합니다.
">expression"숫자형이고 부등식을 충족해야 합니다. expression은 비희소 형식의 double형 스칼라를 반환해야 합니다.
">=expression"
"<expression"
"<=expression"
"@(args) expression "함수 핸들을 충족해야 합니다. 값이 함수 핸들을 충족하려면 핸들은 true 값을 출력해야 합니다.

인수가 여러 번 지정될 수 있다는 표시자로, JSON true 또는 false(따옴표 없음)로 지정됩니다. 디폴트 값은 false입니다. true로 지정하면 인수 또는 인수 세트(튜플)를 여러 번 지정할 수 있습니다. 필수 반복 인수는 한 번 이상 나와야 하고, 선택적 반복 인수는 안 나오거나 한 번 이상 나올 수 있습니다.

예: "repeating":true

인수 설명으로, JSON 문자열로 지정됩니다. 이 속성을 사용하여 인수의 용도를 설명하십시오.

예: "purpose":"Product ID"

더 복잡한 함수 시그니처의 경우, 각 인수 객체에 다음 속성을 사용할 수 있습니다.

인수를 지원하는 플랫폼 목록으로, JSON 문자열로 지정됩니다. 디폴트 값은 모든 플랫폼입니다. 목록의 요소는 computer 함수에서 반환된 archstr과 일치해야 합니다. 목록은 포괄적 또는 배타적일 수 있으나, 동시에 둘 다 될 수는 없습니다.

예: "platforms":"win64,maca64" 또는 "platforms":"-maca64"

함께 표시되어야 하는 인수 세트에 대한 정의로, 인수 객체 목록으로 지정됩니다. 이 속성은 여러 개의 반복 인수로 구성된 세트를 정의하는 데만 사용됩니다. 이러한 함수 시그니처의 경우, 튜플을 정의하고 repeating 속성을 true로 설정하십시오.

함께 사용할 수 없는 인수 세트에 대한 정의로, 인수 객체 목록으로 지정됩니다. 이 속성은 여러 개의 함수 시그니처가 있는 함수에 대한 정보를 제공합니다. 하지만 일반적으로 여러 함수 객체를 사용하여 여러 개의 함수 시그니처를 정의하는 것이 훨씬 쉽습니다. 자세한 내용은 여러 개의 시그니처 항목을 참조하십시오.

함수 시그니처 파일 생성하기

이 예제에서는 함수에 맞게 사용자 지정 코드 제안 및 코드 완성을 만드는 방법에 대해 설명합니다.

나중 단계에 JSON 파일에서 시그니처를 설명할 함수를 만듭니다. 예제 함수는 다음 인수를 허용합니다.

  • 필수 인수 2개

  • varargin을 통해 선택적 positional 인수 1개

  • varargin을 통해 선택적 이름-값 인수 2개

myFunc는 코드 제안을 보여주기 위한 함수이고 인수 검사는 하지 않습니다.

% myFunc  Example function
% This function is called with any of these syntaxes:
%
%   myFunc(in1, in2) accepts 2 required arguments. 
%   myFunc(in1, in2, in3) also accepts an optional 3rd argument. 
%   myFunc(___, NAME, VALUE) accepts one or more of the following name-value 
%       arguments. This syntax can be used in any of the previous syntaxes.
%           * 'NAME1' with logical value
%           * 'NAME2' with 'Default', 'Choice1', or 'Choice2'
function myFunc(reqA,reqB,varargin)
    % Initialize default values
    NV1 = true;
    NV2 = 'Default';
    posA = [];
    
    if nargin > 3
        if rem(nargin,2)
            posA = varargin{1};
            V = varargin(2:end);
        else
            V = varargin;
        end
        for n = 1:2:size(V,2)
            switch V{n}
                case 'Name1'
                    NV1 = V{n+1};
                case 'Name2'
                    NV2 = V{n+1}
                otherwise
                    error('Error.')
            end
        end
    end
end

myFunc와 동일한 폴더 안에 있는 resources 폴더에서 파일 functionSignatures.json에 다음 함수 시그니처 설명을 만듭니다. 입력 이름이 myFunc 본문의 이름과 일치하지 않지만 도움말 텍스트와는 일치합니다.

{
  "_schemaVersion": "1.0.0",
  "myFunc":
  {
     "inputs":
     [
        {"name":"in1", "kind":"required", "type":["numeric"], "purpose":"ID of item"},
        {"name":"in2", "kind":"required", "type":["numeric"], "purpose":"# Items"},
        {"name":"in3", "kind":"ordered", "type":["numeric"], "purpose":"Input Value"},
        {"name":"Name1", "kind":"namevalue", "type":["logical","scalar"],"purpose":"Option"},
        {"name":"Name2", "kind":"namevalue", "type":["char", "choices={'Default','Choice1','Choice2'}"]}
     ]
  }
}

MATLAB은 이 함수 시그니처 설명을 사용하여 코드 제안 및 코드 완성에 대한 정보를 제공합니다.

함수 시그니처 정보의 사용 방법

MATLAB은 사용자가 입력할 때 JSON 파일에 있는 함수 시그니처 정보를 사용하여 입력과 일치하는 구문을 표시합니다. Tab 키를 눌러 부분적으로 입력한 텍스트를 완성할 수도 있습니다. 명령 창에서는 MATLAB이 사용자가 입력할 때 JSON 파일을 사용하여 입력과 일치하는 구문을 표시하지 않습니다.

스크립트 또는 라이브 스크립트에서 코드 제안을 시험하려면 먼저 myFunc를 호출해 보십시오. JSON 파일에서 작성한 이름과 용도가 표시됩니다. 그러면 MATLAB은 인수가 언제 선택적 인수가 되는지, 또 여러 건의 제안이 있는지 알려줍니다(예: 세 번째 positional 인수 또는 이름-값 인수). 이름-값 인수 옵션이 나열됩니다.

Three calls to the myFunc function showing examples of different code suggestions. The first suggestion shows the purpose of the in1 argument, the second suggestion shows the purpose of the in3 argument with the word Optional in parentheses, and the third suggestion shows a list of supported name-value arguments for the options argument.

함수 호출에 이름-값 인수를 추가하면 MATLAB은 JSON 파일에 있는 선택 사항을 제시합니다. 'Name1'이 논리형 스칼라로 정의되어 있기 때문에 MATLAB은 선택 사항(true 또는 false)을 자동으로 채웁니다. MATLAB은 JSON 파일에서 'Name2' 인수 값으로 3개를 취합니다.

Two calls to the myFunc function showing examples of different name-value argument value suggestions. The first suggestion shows true and false as the supported values for the Name1 name-value argument. The second suggestion shows 'Choice1', 'Choice2', and 'Default' as the supported values for the Name2 name-value argument.

여러 개의 시그니처

함수에 여러 구문이 있으면 코드 제안에서 함수 구현에 상관없이 구문을 여러 개의 함수 시그니처로 그룹화하는 것이 유용할 수 있습니다. 여러 개의 시그니처에 코드 제안 및 코드 완성을 제공하려면 JSON 파일에 속성이 동일한 함수 객체를 여러 개 만드십시오.

두 번째 입력값의 클래스에 따라 서로 다른 코드 경로를 따르는 다음 함수를 생각해 보겠습니다. 이 함수는 코드 제안을 위한 예제이므로 계산이므로 오류 검사는 수행하지 않습니다.

function anotherFunc(arg1,arg2,arg3)
    switch class(arg2)
        case 'double'
            % Follow code path 1
        case {'char','string'}
            % Follow code path 2
        otherwise
            error('Invalid syntax.')
    end
end

코드 제안의 관점에서 이 함수에 2개의 함수 시그니처가 있는 경우를 고려해 보겠습니다. 첫 번째 시그니처는 2개의 필수 숫자형 값을 허용합니다. 두 번째 시그니처는 필수 숫자형을 허용하며 그다음에 문자형 또는 string형, 마지막에 필수 숫자형이 옵니다. 여러 개의 함수 시그니처를 정의하려면 JSON 파일에 속성(함수 이름)이 동일한 함수 객체를 여러 개 정의하십시오.

{
  "_schemaVersion": "1.0.0",
  "anotherFunc":
  {
     "inputs":
     [
        {"name":"input1",  "kind":"required", "type":["numeric"]},
        {"name":"input2",  "kind":"required", "type":["numeric"]}
     ]
  },
  "anotherFunc":
  {
     "inputs":
     [
        {"name":"input1",  "kind":"required", "type":["numeric"]},
        {"name":"input2",  "kind":"required", "type":[["char"],["string"]]},
        {"name":"input3",  "kind":"required", "type":["numeric"]}
     ]
  }
}

또는 인수 객체의 mutuallyExclusiveGroup 속성을 사용하여 여러 개의 함수 시그니처를 정의할 수 있습니다. 일반적으로 여러 개의 함수 객체를 구현하는 것이 훨씬 간편하고 읽기 쉽지만, 상호 배타적인 그룹을 사용하면 input1 같은 일반적인 인수 객체를 재사용할 수 있습니다.

{
  "_schemaVersion": "1.0.0",
  "anotherFunc":
  {
     "inputs":
     [
        {"name":"input1",  "kind":"required", "type":["numeric"]},
        {"mutuallyExclusiveGroup":
          [
            [
              {"name":"input2",  "kind":"required", "type":["numeric"]}
            ],
            [
              {"name":"input2",  "kind":"required", "type":[["char"],["string"]]},
              {"name":"input3",  "kind":"required", "type":["numeric"]}
            ]
           ]
        }
     ]
  }
}

참고 항목

도움말 항목

외부 웹사이트