무향향수

[Java]final 키워드 본문

SW아카데미 (23)/JAVA

[Java]final 키워드

튼튼한장 2023. 7. 5. 17:34

[Day3] 클래스 다듬기

Chapter 6-5 final

 

목차 ✅

  1. final이란?
  2. 생성자를 이용하여 final 멤버 변수 초기화
  3. static final이란?

 


final이란?

  • final은 클래스, 메서드, 멤버변수, 지역변수에 사용될 수 있다.
제어자 대상 의미
final 클래스 변경될 수 없는 클래스,
확장될 수 없는 클래스가 된다.
그래서 final로 지정된 클래스는
다른 클래스의 조상이 될 수 없다.
메서드 변경될 수 없는 메서드,
final로 지정된 메서드는
오버라이딩을 통해 재정의 될 수 없다.
멤버변수 변수 앞에 final이 붙으면,
값을 변경할 수 없는 상수가 된다.
지역변수
  • 선언, 초기화되면 수정이 불가능하다.
  • static final과는 다르게 선언과 초기화를 동시에 진행하지 않아도 된다.

 

final class FinalTest { // 조상이 될 수 없는 클래스
    final int MAX_SIZE = 10; // 값을 변경할 수 없는 멤버변수 (상수)

    final void getMaxSize(){ // 오버라이딩 할 수 없는 메서드 (변경 불가)
        final int LV = MAX_SIZE; // 값을 변경할 수 없는 지역변수(상수)
    }
}

 


생성자를 이용하여 final 멤버 변수 초기화하기

final이 붙은 변수는 상수이므로 일반적으로 선언과 초기화를 동시에 하지만, 인스턴스 변수의 경우 생성자에서 초기화 되도록 할 수 있다.

이 기능을 활용하면 각 인스턴스마다 final이 붙은 멤버변수가 다른 값을 갖도록 하는 것이 가능하다.

 

class Card{
    final int Number; // 생성자를 사용하여 초기화하지 않는 경우 ERROR 발생!!
    final String Kind;
    static int width = 100;
    static int height = 250;
    
    Card(String kind, int num){ // 매개변수를 갖는 생성자를 선언하여 final 멤버변수 초기화
        Kind = kind;
        Number = num;
    }
    
    Card(){
        this("HEART", 1); // 마찬가지로 모든 생성자가 final 매개 변수를 초기화하지 않으면 ERROR!
    }
}

 ⚠️ 만약 클래스 내에 final 매개변수와 생성자가 존재하는 경우 단 하나의 생성자라도 final 매개변수를 초기화하지 않으면 에러가 발생하기 때문에 주의해야한다.


static final이란?

  • final과 같이 한 번 선언, 초기화되면 수정이 불가능하다.
  • final과는 다르게 선언과 동시에 초기화를 해야한다.
public class FinalTest {
    public static void main(String[] args) {
        final int a;
        a = 10; // final은 선언만 하고 나중에 초기화를 해도 된다.
    }
    static final int x; // static final을 선언과 동시에 초기화하지 않아 오류 발생
}

 

 

더보기
내용 요약⭐
  • final과 static final 모두 선언, 초기화되면 수정이 불가능하다.
  • ⚠️static final은 무조건 선언과 동시에 초기화를 해야한다.⚠️
더보기

❓질문

  1. final과 static final의 경우 주로 어떤 때 사용될까?
 

'SW아카데미 (23) > JAVA' 카테고리의 다른 글

[Java]오버라이딩  (0) 2023.07.06
[Java]상속  (0) 2023.07.06
[Java]인스턴스 멤버와 정적 멤버  (0) 2023.07.05
[Java] switch문  (0) 2023.07.05
[Java]기본 타입 변환  (0) 2023.07.05