본문 바로가기
Language/자바

final 키워드를 사용하면 좋은 점.

by 띵커베르 2023. 2. 22.
728x90
  1. 변경 불가능성: final 변수는 값을 한번 할당하면 변경이 불가능해집니다. 이로 인해 의도치 않은 값의 변경이나 버그를 방지할 수 있습니다.
  2. 안전한 다중 스레드 환경: final 변수는 다중 스레드 환경에서 안전합니다. final 변수는 한 번 초기화되면 이후에 값이 변경될 수 없으므로, 다른 스레드에서 값을 변경할 가능성이 없습니다.
  3. 상수 값 정의: final 변수는 상수 값의 정의에 사용될 수 있습니다. 예를 들어, Math.PI와 같은 상수 값은 final로 선언됩니다.
  4. 성능 향상: final 변수는 컴파일러에게 추가적인 정보를 제공하므로, 컴파일러가 최적화 작업을 더 잘 수행할 수 있습니다. 또한 final 변수는 컴파일 타임 상수 폴딩(constant folding)을 가능하게 하고, 해당 변수가 인라인 타입으로 컴파일될 수 있습니다.
  5. 가독성: final 변수를 사용하면 코드의 가독성이 높아집니다. final 변수를 사용하면, 이 변수는 한 번만 초기화되고 그 이후에는 변경되지 않는다는 것을 명확하게 알 수 있습니다. 이로 인해 코드를 이해하기 쉬워지며, 버그 발생 가능성도 낮아집니다.
  6. 리팩토링 편의성: final 변수를 사용하면, 이 변수를 사용하는 모든 부분에서 값을 변경할 필요가 없으므로, 리팩토링 작업이 더 쉬워집니다.

===

추가:

컴파일시 인라인 타입으로 컴파일될 수 있다 와 상수 폴딩에 대한 내용

인라인 타입: 컴파일러가 메소드 호출 시 내부의 코드를 호출한 곳으로 옮겨 수행하는 최적화 기법.

아래 add 메소드에서 a, b, final 로 선언한 CONSTANT 변수가 있다.

public class InlineExample {
    private static final int CONSTANT = 10;

    public static int add(int a, int b) {
        return a + b + CONSTANT;
    }
}

위 코드를 인라인 타입으로 컴파일한다면 아래와 같이 될것이다.

public static int add(int a, int b) {
    return a + b + 10;
}

상수 값을 가져오지 않아도 되어 실행 속도가 빨라진다.

 

상수폴딩: 컴파일러가 컴파일 시간에 상수 표현식을 미리 계산해서 상수로 대체하는 최적화 기법

final 로 선언한 상수값이 2개가 있고 calculate 라는 단순 계산하는 메서드가 있다

public class Example {
    public static final int FOO = 10;

    public static void main(String[] args) {
        int bar = FOO * 2;
        System.out.println(bar);
    }
}

위 코드를 컴파일러가 상수 폴딩을 최적화하여 수행하면 아래와 같이 된다.

int bar = 20; // FOO * 2 == 10 * 2 == 20

 

 

728x90

댓글