검색 여닫기
검색
메뉴 여닫기
519
228
4
2천
noriwiki
둘러보기
대문
최근 바뀜
임의의 문서로
미디어위키 도움말
특수 문서 목록
파일 올리기
환경 설정 메뉴 여닫기
notifications
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
user-interface-preferences
한국어
개인 도구
로그인
Scope 문서 원본 보기
noriwiki
문서 공유하기
다른 명령
←
Scope
문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다:
사용자
.
문서의 원본을 보거나 복사할 수 있습니다.
[[분류: 프로그래밍 언어]] == 개요 == Scope란 특정 변수가 유효한 범위를 말한다. Scope은 같은 이름이 겹치는 것을 막아준다. 예를 들어서 <code>f(x) -> x + y</code> 라는 함수에 인자로 <code>val y = 5; 10 * y</code>를 넣었다고 해보자. 그럼 만약 Scope가 없다면, 결과가 <code>f(val y = 5; 10 * y) -> val y = 5; ; 10 * y + y</code>가 되어 55라는 결과가 나온다. 그러나 함수 f(x)의 정의는 사실 올바르지 않은 정의이다. 왜냐하면 y가 정의되어 있지 않기 때문이다. 이러한 문제를 해결하는 것이 scope이다. 더욱 엄밀하게 말하여서 Static scope는 statically하게 identifier의 범위가 정해지는 것을 말하여, dynamic scope는 runtime에서 identifier의 scope가 정해지는 것을 말한다. 위의 예시에서 f(x) -> x + y의 경우, static scope에서는 valid하지 않지만, dynamic scope에서는 valid하다. == Static scope == 정적 범위를 가지는 언어는 [[Syntax]]적으로 제한되는 범위를 가진다. Static scope은 명시적으로 scope가 정해지기 때문에, 함수를 이해하고 검증하기 쉽다는 장점을 가진다. <syntaxhighlight lang="scala"> def f(p) = n; { val n = 5; f(10) } </syntaxhighlight> 위의 예시에서, static scope의 범위는 '''{'''부터 '''}'''사이가 된다. 이는 문법적으로 정해진 것으로, static scope는 문법에 틀리기 때문에 static time (compiler가)위의 코드를 reject한다. == Dynamic scope == 동적 범위를 가지는 언어는 Runtime에 변수의 범위를 가진다. <syntaxhighlight lang="scala"> def f(p) = n; { val n = 5; f(10) } </syntaxhighlight> dynamic scope에서는 runtime에 범위를 정하기 때문에, runtime에서 n이 존재하는 지를 검사한다. 위의 경우에는, f(10)은 5라는 값을 내보내게 된다. Dynamic scope를 [[Rule of inference|Inference rule]]를 통해서 나타내면 다음과 같다: :<math>\begin{array}{c}{ f\in\mathit{Domain}(\Lambda) \quad \Lambda(f)=(x,e’) \quad \sigma,\Lambda\vdash e\Rightarrow v’ \quad \sigma\lbrack x\mapsto v’\rbrack,\Lambda\vdash e’\Rightarrow v } \\\hline { \sigma,\Lambda\vdash f(e)\Rightarrow v }\end{array}</math><ref>https://hjaem.info/articles/en_10_7</ref> == 참고 ==
Scope
문서로 돌아갑니다.