미누에요
[Java] final의 사용, final 변수, final 메서드, final 클래스, 인자로의 final 본문
final
Java에는 final이라는 키워드가 존재한다.
final이라는 키워드는 기본적으로 상수화라는 의미를 가지고 있다.
C/C++에서의 const와 비슷하다고 생각하면 될 거 같다.
이러한 final 키워드의 사용은 크게 4가지가 존재한다.
- 인자로 final 키워드 사용
- final 변수
- final 메서드
- final 클래스
인자로 final 키워드 사용
public class test {
static void isPlus(final int val){ // 인자값에 final 키워드 사용
val = 8; // 인자로 받아온 값 변경시도
if(val>0){
System.out.println("양수입니다.");
}
else{
System.out.println("음수입니다.");
}
}
public static void main(String[] args) {
int val = -9;
isPlus(val);
}
}
인자로 final 키워드를 사용하여 값을 받아온 경우에, 해당 메서드 내부에서 값을 변경할 수 없게된다.
값을 변경하려고 시도할 경우, 에러가 발생하는 것을 확인할 수 있다.
이처럼 인자로 final 키워드를 사용하면, 받아온 값을 실수로라도 변경할 수 없게 만들어 데이터의 손실을 피할 수 있다.
C/C++에서의 const 키워드처럼 사용되는 것이다.
final 변수
public class test {
public static void main(String[] args) {
final int a = 10;
a = 20;
}
}
이번에는 final을 변수로 사용하는 경우이다.
final 키워드를 변수에 사용한다면 처음에 한번 변수에 값을 할당하고 나면, 그 뒤로는 이 값을 변경할 수 없게된다.
이 변수가 "상수화" 되는 것이다.
후에 값을 변경하려 한다면 위와 동일하게 에러가 발생한다.
public class test {
public static void main(String[] args) {
final int a ;
a = 10; // 처음에 값 저장
a = 30; // 에러 발생!
}
}
만약에, 변수에 값을 바로 할당하지 않았다면 위 코드처럼 값을 대입하는 첫 코드는 실행이 된다.
그리고 값이 한번 들어간 뒤에 값을 변경하려 한다면 에러가 발생하게 된다.
결론적으로, 값을 한번 할당하고 나면 변경이 불가능하다.
이러한 final 변수는 상수값을 표시하는 데 자주 사용된다.
예를 들어, 수학의 PI를 표시하거나, 변하지 않는 특정 값을 사용할 때 final 변수를 사용한다.
주로 대문자들의 조합으로 변수명을 정하는 것이 특징이다. (필수 사항은 아니지만 대부분 그렇게 코딩한다.)
public class test {
static final double PI = 3.14;
static public double Area(int r){
return r*r*PI;
}
public static void main(String[] args) {
int r = 5;
System.out.println("r이 "+r+" 인 원의 넓이 : "+ Area(r));
}
}
위처럼 사용할 수 있다.
마지막으로, final 키워드와 static 키워드는 함께 사용되는 경우가 많다.
상수로 선언한 값은 보통 한 클래스 내에서만 사용되기보단 많은 곳에서 사용하려 선언해두기 때문이다.
static 키워드와 함께 사용하면 메모리 상에 final 변수가 계속 존재하므로 메모리 효율도 높아져 많이 사용한다.
final 클래스
public class test extends a{ // a 클래스 상속 시도
public static void main(String[] args) {
}
}
final class a{
private int val;
public void SayHi(){
System.out.println("HIII!!!");
}
}
final 키워드를 클래스에 사용하는 경우에는 해당 클래스가 더이상 상속을 할 수 없는 상태가 된다.
final의 뜻인 "마지막"이라는 의미로 사용되는 것이다.
- final 클래스는 어떤 클래스의 부모도 될 수 없다.
- 즉, 어떤 클래스도 final 클래스를 상속할 수 없다.
위 코드에서는 final 클래스인 a를 test 클래스에서 상속하려고 하고 있다.
이렇게 final 클래스를 상속하면 에러가 발생하여 상속이 되지 않는다.
final 메서드
package chapter06;
public class test extends a{ // a 클래스 상속
@Override // 오버라이딩 시도
public void SayHi(){
System.out.println("Hello!!!");
}
public static void main(String[] args) {
}
}
class a{
private int val;
public final void SayHi(){
System.out.println("HIII!!!");
}
}
final 키워드를 메서드에 사용하면 해당 메서드는 상속된 클래스에서 오버라이딩이 불가능하다.
위처럼 a 클래스를 상속받아 SayHi 메서드를 오버라이딩 하면, 아래와 같이 에러가 발생한다.
'Java' 카테고리의 다른 글
[Java] 상속(inheritance) (0) | 2024.05.10 |
---|---|
[Java] 메서드 오버라이딩(method overriding) (0) | 2024.05.10 |
[Java] static 메서드 (0) | 2024.05.10 |
[Java] 접근 지정자(Access Modifier), Public, Protected, Default, Private (0) | 2024.05.10 |
[Java] instanceof (0) | 2024.04.10 |