[자바] final 키워드

Gammi·2022년 10월 25일
0

JAVA

목록 보기
18/35
post-thumbnail

📓 final 키워드


  • 대상의 변경이 불가능하도록 지정

    = 변경의 최종

  • final 변수의 대표적인 예 : java.lang.String , java.lang.Math

    -> Math.PI : Math 클래스의 PI 상수값은 변경 불가능


변수에 final이 붙은 경우

  • 변수 값 변경 불가

    -> 저장된 값만 사용 가능

    -> 상수로 취급


  • 일반 변수와 구별을 위해 대문자 사용

  • 단어와 단어 사이 구분은 언더스코어 사용


  • 초기화 필수

    -> 초기화 수행 하지 않은 상수 : blank final 상수

    -> 생성자 통해 초기화 하면 사용 가능

    -> 객체마다 다른 상수값을 갖기 위해 사용


class Member {
  final int member = 10;
  // final 변수는 초기화가 필수!!!
  final int member; 
  // 초기화 안하고 선언만 했다면
 
  public Member(int member) {
    super();
    this.member = member;
    // 생성자를 통해서 초기화하면 됨!
    // 만약에 초기화 했으면 생성자 생성 불가능!
  }
  
  public void change() {
//  member = 20; 
    // 오류발생!!!!!
    // final 붙은 변수는 값 변경이 불가능함
    System.out.println(member);
    // 값 변경은 불가능하지만 사용은 가능!
    
    final int member2 = 30;
    // 멤버변수뿐 아니라 로컬변수에도 final 붙을 수 있음!
//  member2 = 88;
    // 얘도 역시 final이 붙었기 때문에 값 변경 불가능함!
    System.out.println(member2);
    // 하지만 final이 붙은 멤버변수와 마찬가지로
    // 값 변경은 불가능해도 사용은 가능!
  }
  
  pulbic int getMember() {
    return member;
    // 기존의 값을 변경은 할 수 없지만
    // 사용은 가능하기 때문에 Getter 메서드 정의 가능
    // 당연히 Setter 메서드는 만들 수 없음!!!
  }
}

  1. 메서드에 final이 붙은 경우
  • 메서드 변경 불가

    -> 오버라이딩 금지


class Member {
  public final void method() {
    System.out.println("final 메서드");
  }
  pulbic void normalMethod() {
    System.out.println("normal 메서드");
  }
}

class Sub extends Member {
  public void normal() {
    super.normal();
  }
  // 일반 메서드만 오버라이딩 가능!
  // final이 붙은 메서드는 오버라이딩이 안됨!
}

  1. 클래스에 final이 붙은 경우
  • 클래스 변경 불가

    -> 상속 금지


final class Member {
  int num = 10;
  public void method() {
  }
}

// class Sub extends Member {}
// !!! 오류 발생 !!!
// class에 final 붙일 경우 상속 불가능!!!!

class Sub {
  Member m = new Member(); 
  // 상속은 불가능하지만 has-a (포함)관계 형태로 사용은 가능
  public void use() {
    m.num = 20;
    m.method();
  }
}
profile
개발자가 되었어요⭐️

0개의 댓글