Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java에서 final 변수와 함께 발생하는 도달 불가능한 문(Unreachable Statement) 완벽 이해

도달 불가능한 문(Unreachable Statement)이란 프로그램이 실제로 실행되는 과정에서 한 번도 실행되지 않는 코드를 의미합니다. 컴파일러는 이러한 코드를 감지하면 컴파일 오류를 발생시켜 개발자에게 알려줍니다.

도달 불가능한 문이 발생하는 주요 원인

  • 코드 앞에 return 문이 있어 해당 지점 이후의 코드가 실행되지 않는 경우
  • 코드에 무한 루프가 존재하여 루프를 벗어날 수 없는 경우
  • 프로그램이 해당 코드에 도달하기 전에 강제로 종료되는 경우

이번 글에서는 final 키워드와 함께 사용될 때 도달 불가능한 문이 어떻게 나타나는지 예제를 통해 살펴보겠습니다.

예제 코드

class Demo_example{
   final int a = 56, b = 99;
   void func_sample(){
      while (a < b){
         System.out.println("The first value is less than the second.");
      }
      System.out.println("This is an unreachable statement");
   }
}
public class Demo{
   public static void main(String args[]){
      Demo_example my_instance = new Demo_example();
      my_instance.func_sample();
   }
}

출력 결과

/Demo.java:11: error: unreachable statement
   System.out.println("This is an unreachable statement");
^
1 error

코드 설명

Demo_example이라는 클래스에는 두 개의 final 정수 변수(사실상 상수 역할)가 선언되어 있으며, 두 값을 비교하는 func_sample 메서드가 정의되어 있습니다. 이후 별도의 클래스 Demomain 메서드에서 Demo_example의 인스턴스를 생성하고, 해당 인스턴스를 통해 func_sample 메서드를 호출합니다.

왜 컴파일 오류가 발생할까?

핵심은 변수 abfinal로 선언되었다는 점입니다. final 변수는 값이 절대 변경되지 않으므로, 컴파일러는 컴파일 시점에 a < b(즉, 56 < 99)의 결과가 항상 참임을 확정할 수 있습니다. 따라서 이 while 루프는 사실상 무한 루프이며, 루프 뒤에 위치한 System.out.println 문은 어떤 경우에도 실행될 수 없습니다.

컴파일러는 이를 미리 판단하여 "unreachable statement" 오류를 발생시킵니다. 만약 변수가 final이 아니었다면 실행 중에 값이 변경될 가능성이 있어 컴파일러가 루프 종료 여부를 판단할 수 없고, 따라서 오류 없이 정상적으로 컴파일됩니다.

이처럼 final 키워드는 상수 선언 외에도 컴파일러의 흐름 분석(flow analysis)에 영향을 주어, 도달 불가능한 코드를 사전에 잡아내는 데 중요한 역할을 합니다.