프로그래밍 언어론 6-1-3강(3). 확실한 초기값 할당 (Definite Assignment)

[프로그래밍 언어론]

2019. 11. 15. 18:09

 

[Definite Assignment]

: 초기화되지 않은 변수들의 사용을 하지 못하게 하는 것 (컴파일러에 의해 정적으로 확인)

: JAVA와 C#에서, 지역변수들에게 definite assignment의 특성을 부여한다.

: 표현식에 대한 모든 가능한 흐름 경로들은 표현식에 있는 모든 변수들에게 값을 할당해야 한다.

: 옛날 방식(conservative)이라 항상 초기화되지 않은 변수 사용을 감지하지는 못한다.

 

# JAVA에서 Definite Assignment 예시

int i;         // 초기화 안함
int j = 3;
...
if (j > 0) {
  i = 2;
}
...
if (j > 0) {
  System.out.println(i);  // i 값 초기화 오류
}

: 흐름상 i값 들어간것 같지만, 컴파일러가 이를 감지하지 못해 초기화 오류 발생된다.