final

muz·2021년 4월 17일
0

Java

목록 보기
14/21
post-thumbnail

🦺 final

추상이 상속을 강제하는 것이라면 final은 상속/변경을 금지하는 규제이다.

final field

필드와 변수는 같은 의미이다. 처음 정해진 값이 바뀌지 않도록 금지하는 규제이다.
다음의 코드를 살펴보자.

class field_cal {
    static final double PI = 3.14; // 값이 변하지 않도록 규제함
    int left, right;
 
    public void setOprands(int left, int right) {
        this.left = left;
        this.right = right;
        field_cal.PI = 6; // PI의 값을 바꾸려고 시도함 
    }
 
    public void sum() {
        System.out.println(this.left + this.right);
    }
 
    public void avg() {
        System.out.println((this.left + this.right) / 2);
    }
}
 
public class fieldCalculator {
 
    public static void main(String[] args) {
 
        field_cal c1 = new field_cal();
        System.out.println(c1.PI);
        //Calculator.PI = 10;
 
 
    }
 
}

변수 PI는 늘 3.14이다. 즉, 변해서는 안되는 값이므로 final을 붙여줌으로써 규제하고 있다. field_cal.PI = 6;를 통해 PI의 값을 바꾸려고 하지만, 컴파일을 진행하면 값이 바뀌지 않는 것을 확인할 수 있다. final로 지정된 변수에는 한번 값이 할당되면 그 값을 바꿀 수 없기 때문 이다. 이러한 특징은 인스턴스 변수에도 적용된다.

final 메소드

final 메소드는 final 변수 만큼 사용 빈도가 높진 않다.

package src.java.finals;

class A {
	final void b() {}
}
class B extends A{
	void b() { }
}

위의 코드는 final 메소드 b를 상속하려고 하기에 오류가 발생한다.

final은 상속/ 변경을 규제한다.

final 클래스

package src.java.finals;

final class C {
	final void b() {}
}
class D extends C {}

위의 코드는 final 클래스를 상속하려 하고 있기에 오류가 발생한다.


Reference
1. final

profile
Life is what i make up it 💨

0개의 댓글