Minwoo Dev.

[Java] final의 사용, final 변수, final 메서드, final 클래스, 인자로의 final 본문

Java

[Java] final의 사용, final 변수, final 메서드, final 클래스, 인자로의 final

itisminu 2024. 5. 10. 16:54
728x90
반응형
SMALL

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 메서드를 오버라이딩 하면, 아래와 같이 에러가 발생한다.

 

 

728x90
반응형
LIST