1. 변수의 선언의 위치에 따라 생존범위가 결정된다.
1번 소스를 컴파일 해보면 '변수 n의 선언이 없다'면서 에러가 난다.
변수 n의 선언과 정의가 if문 안에서 일어나는데, 문제는 n값을 출력할 때 변수 n은 존재하지 않는다.
왜냐하면 변수 n은 if문 안에서만 생존하기 때문이다.
그래서 2번 소스처럼 고치면 변수 n은 main이 종료되는 순간까지 생존하기 때문에 에러 없이 잘 동작한다.
이번엔 3번 소스를 컴파일 해보면 '변수 n이 초기화 되지 않았다'면서 에러가 난다.
변수 n의 선언은 main안에서 했지만, 정의는 if문 안에서 하기 때문에, if문이 수행되지 않으면 선언만 되었고, 정의는 되지 않은 것이다.
2. 컴파일러는 값이 아닌 문법만 본다.
4번 소스를 컴파일 해보면 '변수 n의 초기화 되지 않았다'면서 에러가 난다.
분명히 flag의 값을 true로 주고 있고, 그러면 if문의 조건식이 성립해야 정상이다. 그러나 에러가 난다.
그렇다면 다음 5번 소스를 보자.
이번엔 아무런 에러 없이 잘 동작한다. 왜일까?
if문은 조건식이 참이면 실행, 거짓이면 실행하지 않는다.
즉 4번 소스의 if문은 flag의 값은 true 이지만, 컴파일러는 flag의 값을 보지 않는다. 왜냐하면 flag는 변수이기 때문에.
변수는 값이 변할 수 있다는 가능성이 있기 때문에, 컴파일러 입장에서 보면 위험한 코드인 것이다.
여기서 우리가 알 수 있는 사실은 '컴파일러는 문법만 본다!'이다.
다시 본론으로 돌아와서, if else 문은 둘 중 하나는 무조건 실행이 된다.
참일 경우, 거짓일 경우가 존재 즉, 확정성을 가지는 것이다.
그에 반해 if문은 거짓일 경우의 값이 없다. 즉, 거짓일 경우가 존재하지 않는 것이다. 그래서 컴파일러는 그 불확실성에 대해서 에러를 표시하는 것이다.
'웹 > Java' 카테고리의 다른 글
인자(파라미터)값을 참조형으로 넘겼을 때와 기본형으로 넘겼을 때 차이점 (2) | 2013.04.24 |
---|---|
EditPlus를 이용한 Java 프로그래밍 설정 방법 (0) | 2013.04.16 |
Java 컴파일 및 실행 방법 (0) | 2013.04.15 |
Java 환경변수 설정방법 (0) | 2013.04.15 |