scope
변수가 효력을 가지는 범위
= 대입 연산자를 사용하면 이전에 사용한 변수에 새로운 값을 할당하기에 충돌하지 않는다
definetion governs the binding for that
block
definitions을 감싸는 것. scope을 그 안으로 제한함
block 밖에 효력을 못 미치기 때문에 이 경우 minus되었다고 표현
ML: let... in.. end , func ....
Python과 자바의 Scope Rule
Python은 LGB rule: local, global, builtin
자바는 파이썬과 다르게 변수의 선언과 생성을 구분한다.
그래서 왼쪽의 파이썬 코드는 x = 3을 하였을 때 이전의 x 변수를 찾아낼 수 있지만
자바에서 int를 써서 새로 선언한 경우 이전의 x 변수를 찾아낼 수 없다
다만 파이썬은 functional local에 대해서는 구분 짓기에 맨 오른쪽같은 경우도 있다
Nampespace
이름을 가진 블록을 사용자가 생성할 수 있다.
이를 통해 외부에서 그 안의 값들에 접근할 수 있다.
- c++ : namespace
- Modula-3 module
- Ada package
- Java package
자바는 클래스 이름 자체가 바로 네임스페이스의 예시
클래스이름.필드이름 이런 식으로 값에 접근 가능
public class Month {
public static int min = 1;
public static int max = 12;
…
}
// Month.min
// Month.max
ML의 경우 struct를 이용
Namespace Refinement
visibility를 제한할 수 있다.
public == interface
not public하고 싶을 땐 namespace
(자바 작동 방식과 유사)
Primitive Namespace
변수의 타입을 명시해두면 변수의 이름과 타입을 컴퓨터가 구분할 수 있다
!! Dynamic Scoping
static은 코드만 보고도 알 수 있지만 Dynamic은 runtime 때에만 알 수 있다
그래서 클래스나 함수 자체의 선언은 static scoping이다
python은 dynamic scoping을 쓰진 않지만... 이를 한다고 했다면...
호출하는 단위의 순서로 scoping이 일어난다.
'CS > Introduction of Coumputer Science' 카테고리의 다른 글
Computer Security & AI (0) | 2022.11.25 |
---|---|
Big Data (0) | 2022.11.15 |
Network and Wireless (0) | 2022.11.15 |
Quantum Computing (0) | 2022.11.11 |
Computer Vision (0) | 2022.11.11 |