final

Category
스터디노트 Spring
Status
Published
Tags
개념
Java
Spring
final
Description
Published
Slug
자바에서 final 키워드는
🔒 "한 번 정해지면 다시는 바꿀 수 없다" 라는 의미

final의 역할

대상
의미
변수 (필드, 지역 변수)
한 번 값이 정해지면 재할당 불가
메서드
오버라이딩(재정의) 불가
클래스
상속 금지

예제: 변수에 final

final int number = 10; number = 20; // ❌ 컴파일 에러! 한 번 정해졌기 때문에 다시 못 바꿈
TypeScript로 치면 const와 같음
const number = 10; number = 20; // ❌ 에러

 

예제: 메서드에 final

public class Animal { public final void speak() { System.out.println("소리냄"); } } public class Dog extends Animal { @Override public void speak() { // ❌ 에러: final 메서드는 오버라이드 불가 System.out.println("멍멍"); } }
메서드에 final을 붙이면 자식 클래스가 재정의할 수 없게 막는 것

 

예제: 클래스에 final

public final class Utils { public static void hello() { System.out.println("Hello!"); } } public class MyUtils extends Utils { // ❌ 에러: final 클래스는 상속 불가 }
final class는 완전히 봉인된 클래스, 상속도 못 함

실무에서 사용

상황
설명
불변 객체 만들기
final 변수로 내부 값 못 바꾸게
상속 막기
설계상 확장되면 안 되는 클래스에 final
안전한 메서드 고정
중요한 메서드는 오버라이딩 못 하게 final 처리

주의할 점

final List<String> list = new ArrayList<>(); list.add("hello"); // ✅ 가능 list = new ArrayList<>(); // ❌ 불가능
  • final참조값 자체를 못 바꾸게 하는 것
  • 그 객체 내부의 내용은 바꿀 수 있음
마치 TS에서 const arr = [] 하고 arr.push()는 되는 것처럼
 

대상
final 의미
변수
한 번 할당 후 값 변경 불가
메서드
자식 클래스에서 오버라이딩 불가
클래스
상속 불가