본문 바로가기

Language/Java

[JAVA]final

- Keyword final에 대해 -

1. 변수 앞에 썼을 때 final 

public final String lens = "광각렌즈";

해당 변수는 같은 클래스 내에서도 값을 바꿀 수가 없다. (외부 클래스에서도 당연히 못 바꿈.)

**그렇다면 무조건 선언과 동시에 초기화를 해야 할까? 

NO. 생성자를 통해 초기화 시켜도 된다! 

Why? 생성자를 통해 객체를 생성함과 동시에 final 변수를 초기화 하는 것은, final 변수를 선언과 동시에 초기화 하는 것과 의미가 같다.

public class ActionCam extends Camera {
	public final String lens; 
	
    //생성자
    public ActionCam(){
        // 생성자를 이용하여 final 변수 초기화
        this.lens = "광각렌즈"
    }

}

 

2. 매소드 앞에 썼을 때 final

Method 앞에 final을 쓰면, 해당 method는 자식 클래스에서 오버라이딩 하지 못한다.

 

public final void makeVideo ()
{
	System.out.println("이 매소드는 자식 클래스에서 오버라이딩 못한다!")
}

3. 클래스 앞에 썼을 때 final

해당 클래스는 상속될 수 없다. 따라서  자식 클래스를 가지지 못하게 된다.

public final class ActionCam {
//...
}

4. Final Keyword의 위치 

// 먼저 적는 우선순위
// 접근제어자(public,private...) > abstract > static > final > ...

5. static과 final의 차이

final은 해당 값에 대한 할당을 딱 한번만 한다는 소리이다. 따라서 변수의 값을 다시 변경할 수 없고, 매소드에 대한 오버 라이딩이 불가하며, 클래스를 상속할 수 없도록 하는 것이다.

static은 해당 변수나 매소드를 컴파일 타임에 만드는 것이다. 이는 해당 변수나 매소드가 프로그램 시작 부터 끝까지 수명을 유지할 수 있도록 해준다. 

따라서 이 둘을 같이 사용한 static final은 해당 변수가 절대 변경할 수 없고, 프로그램 시작 부터 끝까지 살아 있는 것을 뜻하며, 상수 표현 시 사용한다. 

'Language > Java' 카테고리의 다른 글

[JAVA] 추상화와 추상화 클래스  (0) 2023.02.01
[JAVA]열거형  (0) 2023.01.29
Chap07_13 참조(reference)  (0) 2023.01.29
[JAVA] Super  (0) 2023.01.28
일반 변수와 참조 변수 바로 알기  (0) 2023.01.28