티스토리 뷰

반응형

Final 키워드

 

final은 마지막, 최종적이라는 의미를 가지고 있기 때문에 변수나 메서드의 내용을 수정하지 않고 고정 시킬 때 사용하는 키워드 입니다.

 

클래스에의 final 키워드

 

클래스에 final 키워드가 붙는 경우는 '상속 불가'의 의미를 가집니다.

 

1
final public class A {}

A 클래스를 final 키워드를 통해 다음과 같이 정의를 하였습니다.

 

1
public class B extends A{}

B 클래스가 A클래스를 상속받게 하면 다음과 같은 오류가 발생합니다.

 

 

B 클래스는 A클래스의 하위 클래스가 될 수 없다는 오류가 발생합니다.

 

 

메서드의 fnal 키워드

 

메서드의 final 키워드가 붙는 것은 '재정의 불가'를 의미합니다.

상위 클래스의 메서드를 하위 클래스에서 오버라이딩을 막을 때 사용합니다.

 

1
2
3
4
5
6
7
 public class A
 {
     final public void show()
     {
         System.out.println("안녕하세요");
     }
 }

상위 클래스인 A클래스에 final 키워드가 붙은 show() 메서드를 구현합니다.

 

1
2
3
4
5
6
7
public class B extends A
{
    public void show()
    {
        System.out.println("B클래스입니다.");
    }
}

A클래스를 상속받는 B클래스를 overriding 합니다. 그렇게 되면 다음과 같은 오류가 발생하게 됩니다.

 

 

A클래스의 show() 메서드를 오버라이딩 할 수 없다는 오류입니다.

 

 

변수의 fnal 키워드

 

final로 선언된 변수는 값을 최초에 한번 초기화 할 수 있고, 그 값을 변경이 불가능한 상수가 되는 것을 의미합니다. 보통 static 키워드와 같이 사용이 되면서 어플리케이션 전체에서 사용되는 고정값이 필요할떄 사용됩니다.

 

1
2
3
4
5
 public class A
 {
     static final int num = 10;
 }
 

static, final 키워드로 선언이 되어진 int형 변수 num을 선언하였습니다.

 

1
2
3
4
5
6
7
8
9
10
11
public class Main {
    
    public static void main(String argsp[])
    {    
        A.num=20;
        System.out.println(A.num);
    }
 
}
 
 

Main 메서드에서 A.num의 새로운 값을 할당하게 되면 다음과 같은 오류가 발생합니다.

 

 

final field인 num은 값을 할당 할 수 없다는 오류 메세지입니다.

 

추가적으로 num 변수에 접근하는 방식이 클래스명.변수명이라는 것입니다.

왜냐하면 num은 static 변수로 객체 영역에 속하는 변수가 아닌 클래스 영역에 속하는 변수이므로 메모리상에서는 static 영역에 속하게 됩니다.

따라서 저런식으로 객체를 생성하지 않아도 field에 접근이 가능한 것입니다.

 

반응형