스코프와 수명, 참조 환경, 명명 상수
살아 있지만 보이지 않는 변수가 있을까?
스코프와 수명
보이는 범위와 사는 기간은 다릅니다
보통의 지역 변수는 함수 안에서 보이고 함수가 도는 동안만 살아 있어, 스코프와 수명이 겹쳐 보입니다. 하지만 둘은 다른 개념입니다. C의 static 변수는 함수 안에서만 보이지만, 프로그램이 도는 내내 살아 있습니다.
5편의 예시 코드입니다. main은 프로그램이 시작하는 함수이고, 구간의 길이는 예시입니다.
참조 환경 · 정적 스코프
그 자리에서 보이는 이름 전부
참조 환경(referencing environment)은 어떤 문장에서 보이는 모든 이름의 모음입니다. 정적 스코프 언어에서는 그 자리의 지역 변수와, 그 자리를 둘러싼 스코프들의 보이는 변수로 이루어집니다.
8편의 예제입니다. 변수만 적었고, 같은 이름에 가려진 변수는 빠집니다.
참조 환경 · 동적 스코프
활성인 함수를 봅니다
함수가 실행을 시작했고 아직 끝나지 않았으면 활성(active) 상태라고 합니다. 동적 스코프 언어의 참조 환경은 지역 변수와, 활성 상태인 모든 서브프로그램의 보이는 변수로 이루어집니다.
서브프로그램은 함수처럼 이름을 붙여 부르는 코드 묶음입니다.
명명 상수
숫자에 이름을 붙입니다
명명 상수(named constant)는 값이 한 번 묶이면 바꿀 수 없는 변수입니다. 숫자 대신 이름을 쓰면 뜻이 보여 읽기 쉽고, 값을 바꿀 때 한 곳만 고치면 됩니다.
예시 코드입니다. 배열 a의 크기 100에 LEN이라는 이름을 붙였습니다. const는 값을 바꾸지 못하게 하는 표시입니다.
상수의 바인딩 시점
상수도 언제 묶이느냐가 다릅니다
명명 상수의 값이 묶이는 때도 언어마다 다릅니다. C#의 const는 컴파일할 때, readonly는 실행 중에 값이 묶입니다. 어느 쪽이든 한 번 묶인 뒤에는 바꿀 수 없습니다.
2 * width + 1은 예시입니다. width가 변수이면 값은 실행 중에야 정해집니다. 값이 실행 전에 묶이는 명명 상수를 교재는 manifest constant라고 부릅니다.
정리
여섯 속성이 언제, 어디서
변수의 여섯 속성이 언제, 어떻게 묶이는지가 언어의 성격을 정합니다. 일찍 묶으면 효율적이고, 늦게 묶으면 유연합니다.
다음 강의