전역 변수

전역 변수 (Global Variables)

전역 변수(global variable)는 Octave 어디에서든 접근할 수 있는 변수예요. 함수를 호출할 때 매개변수로 포함하는 것처럼 명시적으로 전달하지 않아도 현재 컨텍스트 밖에서 접근할 수 있는 로컬 변수와는 대조적이죠.

출처: 문서

본문

전역 변수는 Octave 어디에서든 접근할 수 있는 변수예요. 이는 함수를 호출할 때 매개변수로 포함하는 것처럼 명시적으로 전달하지 않으면 현재 컨텍스트 밖에서 접근할 수 없는 로컬 변수와 대조돼요.

변수는 global 선언문을 사용해 전역으로 선언돼요. 다음 문장들은 모두 전역 선언이에요.

global a
global a b
global c = 2
global d = 3 e f = 5

global 한정자는 다음 문장 종료 표시(쉼표 ,, 세미콜론 ;, 또는 개행 '\n')까지만 적용돼요. 예를 들어 다음 코드는 전역 변수 하나 a와 값 1이 할당된 로컬 변수 하나 b를 선언해요.

global a, b = 1

전역 변수는 global 문에서 한 번만 초기화될 수 있어요. 예를 들어 다음 코드를 실행한 후

global gvar = 1
global gvar = 2

전역 변수 gvar의 값은 2가 아니라 1이에요. clear gvar 명령으로는 위 동작이 바뀌지 않지만, clear all은 바꿔요.

하나의 보편적 변수에 접근하려면 함수 본문 안에서도 그 변수를 전역으로 선언해야 해요. 예를 들어

global x
function f ()
  x = 1;
endfunction
f ()

는 전역 변수 x의 값을 1로 설정하지 않아요. 대신 x라는 로컬 변수가 만들어져 값 1이 할당돼요. 전역 변수 x의 값을 바꾸려면 함수 본문 안에서도 전역으로 선언해야 해요.

function f ()
  global x;
  x = 1;
endfunction

전역 변수를 함수의 매개변수 목록에 전달하면 로컬 복사본을 만들 뿐 전역 값을 수정하지 않아요. 예를 들어 함수

function f (x)
  x = 0
endfunction

가 있고, 최상위 레벨에서 x를 전역 변수로 정의했다면

global x = 13

표현식

f (x)

은 함수 안에서 x의 값을 0으로 표시하지만, 최상위 레벨의 x 값은 그대로 남아요. 함수가 인자의 복사본으로 작업하기 때문이에요.

프로그래밍 주의: 전역 변수가 때로는 코딩 문제에 대한 올바른 해결책이기도 하지만, 현대적 모범 사례는 그 사용을 권장하지 않아요. 전역 변수에 의존하는 코드는 사용자마다 예측할 수 없게 동작할 수 있고 디버깅이 어려울 수 있어요. 전역 변수는 시스템 전반의 변화를 도입해서 버그를 특정 함수나 함수 안의 특정 루프로 국한하기 어렵게 만들 수 있기 때문이에요.

isglobal은 이름이 전역으로 보이는 변수면 true를 반환해요.

global x
isglobal ("x")
   ⇒  1

더 알아보기

  • 영속 변수(Persistent Variables)에 대한 내용을 이어서 보면 좋아요.
  • isvarname, exist 함수도 함께 살펴보세요.