Main Content

명령 구문 또는 함수 구문 선택하기

MATLAB®에는 함수 구문명령 구문, 두 가지 함수 호출 방식이 있습니다. 이 페이지에서는 이러한 구문 형식의 차이점과 명령 구문에서 자주 발생하는 실수를 피하는 방법을 설명합니다.

함수 호출에 대한 소개 정보는 함수 호출 항목을 참조하십시오. 함수를 정의하는 방법과 관련된 내용은 파일 내에서 함수 생성하기 항목을 참조하십시오.

명령 구문과 함수 구문

MATLAB에서 다음 명령문은 서로 동등합니다.

load durer.mat        % Command syntax
load('durer.mat')     % Function syntax

이러한 동등성은 명령과 함수의 쌍대성(Command-function Duality)이라고도 합니다.

다음과 같은 표준 함수 구문이 모든 함수에서 지원됩니다.

[output1, ..., outputM] = functionName(input1, ..., inputN)

함수 구문에서 입력값은 데이터, 변수는 물론 MATLAB 표현식도 될 수 있습니다. 입력값이 숫자형 값 2 또는 string형 배열 ["a" "b" "c"]와 같은 데이터인 경우 MATLAB은 이 데이터를 그대로 함수에 전달합니다. 입력값이 변수인 경우 MATLAB은 변수에 할당된 값을 전달합니다. 입력값이 2+2 또는 sin(2*pi)와 같은 표현식인 경우 MATLAB은 먼저 이 표현식을 평가하고 그 결과를 함수에 전달합니다. 함수에 출력값이 있는 경우 위의 예제 구문에서 보는 것처럼 출력값을 변수에 할당할 수 있습니다.

명령 구문은 더 단순하지만, 더 제한적입니다. 명령 구문을 사용하려면 입력값을 쉼표가 아닌 공백으로 구분하고 괄호로 묶지 마십시오.

functionName input1 ... inputN

명령 구문을 사용하면 MATLAB은 모든 입력값을 문자형 벡터로(즉, 작은따옴표로 묶인 것처럼) 전달하고 출력값을 사용자 정의 변수에 할당하지 않습니다. 함수가 출력값을 반환하면 이는 ans 변수에 할당됩니다. 문자형 벡터 이외의 데이터형을 전달하려면 함수 구문을 사용하십시오. 공백이 포함된 값을 전달하는 데는 두 가지 옵션이 있습니다. 그중 하나는 함수 구문을 사용하는 것입니다. 다른 하나는 작은따옴표로 값을 묶는 것입니다. 이렇게 하지 않으면 MATLAB은 공백이 값을 여러 입력값으로 분할하는 것으로 간주합니다.

값이 변수에 할당되어 있으면 함수 구문을 사용하여 함수에 값을 전달해야 합니다. 명령 구문은 항상 입력값을 문자형 벡터로 전달하며, 변수 값을 전달할 수 없습니다. 예를 들어, 변수를 생성하고 변수 값을 전달하는 함수 구문을 사용하여 disp 함수를 호출해 보겠습니다.

A = 123;
disp(A)

이 코드는 예상했던 결과를 반환합니다.

123

명령 구문을 사용하여 A의 값을 전달할 수는 없습니다. 그 이유는 다음 호출은

disp A

다음과 동일하고,

disp('A')

다음을 반환하기 때문입니다.

A

흔히 발생하는 명령 구문 관련 실수 방지하기

작업 공간에 다음 변수가 포함되어 있다고 가정하겠습니다.

filename = 'accounts.txt';
A = int8(1:8);
B = A;

다음 표에서는 명령 구문이 일반적으로 잘못 쓰이는 예를 보여줍니다.

다음 명령은...다음과 동일함값 전달을 위한 올바른 구문
open filenameopen('filename')open(filename)
isequal A Bisequal('A','B')isequal(A,B)
strcmp class(A) int8strcmp('class(A)','int8')strcmp(class(A),'int8')
cd tempdircd('tempdir')cd(tempdir)
isnumeric 500isnumeric('500')isnumeric(500)
round 3.499round('3.499')(round([51 46 52 57 57])과 동일함)round(3.499)
disp hello worlddisp('hello','world')

disp('hello world')

또는

disp 'hello world'

disp "string"disp('"string"')disp("string")

변수 이름 전달

save, load, clear, whos와 같은 일부 함수는 변수 이름에 문자형 벡터를 사용해야 합니다. 예를 들면 다음과 같습니다.

whos -file durer.mat X

이 명령은 예제 파일 durer.mat에서 변수 X에 대한 정보를 요청합니다. 이 명령은 다음과 동일합니다.

whos('-file','durer.mat','X')

MATLAB의 명령 구문 인식 체계

모호하게 여겨질 수 있는 명령문을 살펴보겠습니다.

ls ./d

이 명령문은 './d'를 인수로 사용하는 ls 함수에 대한 호출일 수 있습니다. 이 명령문은 또한 변수 d를 제수로 사용하여 배열 ls에 대한 요소별 나누기를 나타내는 것일 수도 있습니다.

명령줄에서 이 명령문을 실행하면 MATLAB이 구문 규칙, 현재 작업 공간 및 경로를 사용하여 lsd가 함수인지 아니면 변수인지를 확인할 수 있습니다. 그러나 코드 분석기 및 편집기/디버거와 같은 일부 구성요소는 경로나 작업 공간을 참조하지 않고 동작합니다. 이러한 구성요소를 사용할 때, MATLAB은 표현식이 명령 구문을 사용한 함수 호출인지 여부를 확인하기 위해 구문 규칙을 사용합니다.

일반적으로, MATLAB은 식별자(함수나 변수의 이름도 식별자가 될 수 있음)를 인식할 때 다음과 같이 식별자 다음에 오는 문자를 분석하여 표현식의 유형을 확인합니다.

  • 등호(=)는 대입식을 의미합니다. 예를 들면 다음과 같습니다.

    ls =d
  • 식별자 다음에 있는 여는 괄호는 함수 호출을 의미합니다. 예를 들면 다음과 같습니다.

    ls('./d')
  • 식별자 다음에 공백이 있고 잠재적 연산자 다음에 공백이 없는 경우는 명령 구문을 사용하는 함수 호출을 의미합니다. 예를 들면 다음과 같습니다.

    ls ./d
  • 잠재적 연산자 양쪽에 공백이 있거나 연산자 양쪽 어디에도 공백이 없는 경우는 변수에 대한 연산을 의미합니다. 예를 들어, 다음 명령문은 서로 동일합니다.

    ls ./ d
    
    ls./d

따라서, MATLAB은 모호하게 여겨질 수 있는 명령문 ls ./d를 명령 구문을 사용하는 ls 함수에 대한 호출로 처리합니다.

가장 좋은 방법은 모호성을 없애기 위해 흔히 사용하는 함수와 충돌하지 않도록 변수 이름을 정의하고, 연산자 양쪽에 공백에 두거나 명시적 괄호를 사용하여 함수를 호출하는 것입니다.

참고 항목

|