728x90
- 변경 불가능성: final 변수는 값을 한번 할당하면 변경이 불가능해집니다. 이로 인해 의도치 않은 값의 변경이나 버그를 방지할 수 있습니다.
- 안전한 다중 스레드 환경: final 변수는 다중 스레드 환경에서 안전합니다. final 변수는 한 번 초기화되면 이후에 값이 변경될 수 없으므로, 다른 스레드에서 값을 변경할 가능성이 없습니다.
- 상수 값 정의: final 변수는 상수 값의 정의에 사용될 수 있습니다. 예를 들어, Math.PI와 같은 상수 값은 final로 선언됩니다.
- 성능 향상: final 변수는 컴파일러에게 추가적인 정보를 제공하므로, 컴파일러가 최적화 작업을 더 잘 수행할 수 있습니다. 또한 final 변수는 컴파일 타임 상수 폴딩(constant folding)을 가능하게 하고, 해당 변수가 인라인 타입으로 컴파일될 수 있습니다.
- 가독성: final 변수를 사용하면 코드의 가독성이 높아집니다. final 변수를 사용하면, 이 변수는 한 번만 초기화되고 그 이후에는 변경되지 않는다는 것을 명확하게 알 수 있습니다. 이로 인해 코드를 이해하기 쉬워지며, 버그 발생 가능성도 낮아집니다.
- 리팩토링 편의성: 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
'Language > 자바' 카테고리의 다른 글
람다, 익명클래스는 왜 final 또는 effectively final 에만 접근 가능할까? (0) | 2023.02.22 |
---|---|
자바 클로저에 대한 짧은.. (0) | 2023.02.22 |
왜 private인 필드가 변하지 않도록 하기 위해 final 키워드를 선언해야 하는가?(by.리플렉션) (0) | 2023.02.14 |
메서드 변수에 사용하는 static 키워드 (0) | 2023.02.14 |
final 키워드는 객체 참조에 어떤 영향을 미치는가? (0) | 2023.02.14 |
댓글