JAVA/자바공부

TIL - Final 키워드

sendkite 2022. 2. 11. 00:08

Final 키워드 정리 

 

  • Final 키워드가 나타날 수 있는 곳은 딱 3 군데다.
    • 클래스
    • 변수
    • 메서드
  • Spring 의존성 삽입할때도 씀

1. final과 클래스

  • 상속을 허락하지 않겠다는 용도
public final class 고양이 {
    // final은 상속을 허락하지 않겠다는 의미
}

// 컴파일 에러! The 도라에몽 cannot subclass the final 고양이
public final 도라에몽 extends 고양이 {
}

2. final과 변수

  • 변경이 불가능한 상수(값)으로 선언
  • 최초 한번만 초기화 할 수 있다.(**** 매우 중요)
final static int 정적상수1 = 1;
final static int 정적상수2;

final int 객체상수1 = 1;
final int 객체상수2;


static {
    // ok. 최초 초기화
    // static 변수는 static 블록에서 초기화
    정적상수2 = 2;

    // 에러! 한번 초기화 하면 다시 재할당 할 수 없다.
    // 정적상수2 = 4;
}

고양이() {
    //ok. 최초 초기화
    //객체 인스턴스화, 생성자에서 초기화
    객체상수2 = 4;

    // 에러! 한번 초기화 하면 다시 재할당 할 수 없다.
    // 객체상수2 = 5;

    // Local 변수도 마찬가지 룰
    final int 지역상수1 = 1;
    final int 지역상수2;
    지역상수2 = 2;
}


// 매개변수에도 쓰면 재할당을 방지한다
// Service에 Create 로직 예문
public List<TodoEntity> create(final TodoEntity entity){
        // 검증, save, return 세 단계로 구성
        // 1. validation
        validation(entity);

        // 2. save
        repository.save(entity);
        log.info("Entity Id : {} is saved", entity.getUserId());

        // 3. return
        return repository.findByUserId(entity.getUserId());
}

3.Final과 메서드

  • 재정의 즉 오버라이딩이 금지된다.
public class 동물 {
    final void 숨쉬기() {
        System.out.println("호흡")
    }
}

class 포유류 extends 동물() {
    // 에러! Cannot override the final method from 동물
    void 숨쉬다() {
        System.out.println("호흡")
    }
}

출처 / 더 많은 내용

반응형