MATLAB 코드의 투명도
MATLAB®이 주석, 문자형 벡터 및 문자열 리터럴을 무시하면서 코드를 스캔하여 모든 변수 액세스를 식별할 수 있다면, 그 코드는 변수 액세스가 투명한 것입니다. 변수 액세스에는 작업 공간 변수의 읽기, 추가, 제거 또는 수정이 포함됩니다.
다음과 같은 코딩 컨텍스트에서 MATLAB은 투명한 변수 액세스를 필요로 합니다.
함수 인수 유효성 검사 블록. 자세한 내용은 변수와 함수 액세스에 대한 제한 항목을 참조하십시오.
parfor
루프 또는spmd
블록의 본문. 자세한 내용은 parfor 루프 또는 spmd 문에서 투명성 확보하기 (Parallel Computing Toolbox) 항목을 참조하십시오.
이러한 컨텍스트에서 변수 액세스가 투명하지 않으면 런타임 오류가 발생합니다.
투명한 코드 작성하기
투명한 코드는 변수 이름을 명시적으로 참조합니다. 예를 들어, 다음 코드에서 MATLAB은 X
와 ii
를 변수로 식별할 수 있습니다.
X = zeros(1,10); for ii = 1:10 X(ii) = randi(9,1); end
하지만 eval
함수에 대한 다음 호출에서는 입력값이 문자열이기 때문에 MATLAB은 eval
에 전달된 명령문에 있는 변수를 인식할 수 없습니다.
X = zeros(1,10); for ii = 1:10 eval('X(ii) = randi(9,1);') end
이 코드를 실행하기 전에 MATLAB은 한 개의 인수(문자형 벡터 'X(ii) = randi(9,1);'
)가 포함된 eval
함수에 대한 호출을 발견하게 됩니다.
코드가 투명하려면 MATLAB이 검사 또는 정적 분석을 통해 변수를 식별할 수 있도록 코드가 변수 이름을 명시적으로 참조해야 합니다. 문자형 벡터 'X(ii) = randi(9,1);'
을 대상으로 eval
함수를 사용한다는 것은 MATLAB이 코드를 실행해야만 X
와 ii
를 변수로 식별할 수 있다는 의미입니다.
다음은 투명한 변수 액세스가 이루어지지 않는 함수 및 코딩을 일부 나열한 것입니다.
명령 형식을 사용하여 함수에 변수를 전달하는 방법은 인수를 문자열로 전달하는 방법과 동일하기 때문에 투명하지 않습니다. 예를 들어, clear
함수에 대한 다음 호출은 모두 투명하지 않습니다.
clear X clear('X')
코드가 작업 공간 변수를 생성해도 MATLAB이 코드를 실행한 후에만 이 새 변수를 식별할 수 있다면 이 코드의 변수 액세스는 투명하지 않은 것입니다. 예를 들어, MATLAB은 MAT 파일에서 어떤 변수를 불러왔는지 확인할 수 없기 때문에 다음 명령문은 투명하지 않습니다.
load foo.mat
하지만 불러온 변수를 이름에 명시적으로 할당하는 코드의 경우에는 왼쪽의 이름이 작업 공간 변수를 참조한다는 것을 MATLAB이 인식할 수 있기 때문에 투명합니다. 예를 들어, 다음 명령문은 MAT 파일의 변수 X
를 이름이 X
인 변수의 작업 공간으로 불러옵니다.
X = load('foo.mat','X');
변수에 대한 액세스는 작업 공간 내에서 투명해야 합니다. 예를 들어, 코드는 다른 작업 공간에 변수를 생성하려면 투명도가 요구되는 작업 공간에서 evalin
함수 또는 assignin
함수를 사용할 수 없습니다.