반응형
Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- list
- input
- vscode
- Array
- CSS
- IntelliJ
- 단위테스트
- js
- string
- 자바문법
- 테스트자동화
- 자바스크립트
- Java
- junit5
- html
- 정규식
- junit
- 이클립스
- 문자열
- javascript
- HashMap
- 인텔리제이
- json
- java테스트
- Eclipse
- 자바
- Visual Studio Code
- 배열
- ArrayList
- math
Archives
- Today
- Total
어제 오늘 내일
[Java] final 키워드 (변수, 메서드, 클래스) 본문
Java에서 final 키워드는 더 이상 변경할 수 없도록 제한하는 역할을 합니다.
final은 변수, 메서드, 클래스에 모두 적용할 수 있으며, 적용 대상에 따라 의미가 달라집니다.
이 글에서는 각각의 의미와 활용 예제를 쉽게 정리합니다.
1. final 변수 — 값 변경 불가
final이 변수에 붙으면 값을 한 번만 설정할 수 있고 이후 변경할 수 없습니다.
1-1. 기본 예
final int age = 20;
// age = 30; // ❌ 오류: final 변수는 값 변경 불가
1-2. 초기화는 반드시 한 번만
final String name;
name = "Tom"; // ✔ 최초 1회 설정 가능
// name = "Alice"; // ❌ 다시 변경 불가
1-3. final 참조 변수
참조 변수(객체)에 final을 붙이면 참조 자체는 변경 불가지만, 객체 내부 값은 변경 가능합니다.
final Person p = new Person("Tom");
p.name = "Alice"; // ✔ 내부 값 변경 가능
// p = new Person("Bob"); // ❌ 참조 변경 불가
핵심
- final = “참조를 바꾸지 못한다”
- 객체 내부 상태 변경은 가능
2. final 메서드 — 오버라이딩 금지
final이 메서드에 붙으면 자식 클래스가 메서드를 오버라이딩할 수 없습니다.
class Parent {
final void hello() {
System.out.println("Hello");
}
}
class Child extends Parent {
// @Override
// void hello() {} // ❌ 오버라이딩 불가
}
언제 사용할까?
- 핵심 로직을 자식 클래스가 변경하지 못하도록 보호해야 할 때
- 설계상 반드시 동일하게 유지해야 하는 기능을 명시할 때
3. final 클래스 — 상속 금지
final이 클래스에 붙으면 해당 클래스를 상속할 수 없습니다.
final class Animal { }
// class Dog extends Animal {} // ❌ 오류: final 클래스는 상속 불가
final 클래스를 언제 사용할까?
- 더 이상 확장 가능하게 하고 싶지 않을 때
- 안전성, 보안성, 불변성을 보장해야 할 때
(대표 예: String 클래스는 final)
4. final 키워드 정리
적용 대상 의미
| 적용대상 | 의미 |
| 변수 | 값 변경 불가 (참조 변수는 주소 불변) |
| 메서드 | 오버라이딩 불가 |
| 클래스 | 상속 불가 |
5. 전체 예제
final class Person {
final String name;
Person(String name) {
this.name = name; // final 변수 초기화
}
final void introduce() { // 오버라이딩 불가
System.out.println("My name is " + name);
}
}
public class Main {
public static void main(String[] args) {
Person p = new Person("Tom");
p.introduce();
}
}
결과:
My name is Tom
6. 언제 final을 사용할까?
- 변수
→ 값이 변경되면 안 되거나, 안전한 값 유지가 중요할 때 - 메서드
→ 상속 구조에서 특정 기능의 변경을 막고 싶을 때 - 클래스
→ 절대 확장되지 않도록 설계하고 싶을 때 (ex: String)
반응형
'IT > Java' 카테고리의 다른 글
| [Java] this 키워드 사용법 (0) | 2025.12.26 |
|---|---|
| [Java] static 변수와 static 메서드 차이 (0) | 2025.12.25 |
| [Java] 추상 클래스와 인터페이스 차이 (0) | 2025.12.24 |
| [Java] 추상클래스란? (abstract class) (0) | 2025.12.24 |
| [Java] 인터페이스(interface) 사용법 및 예제 (0) | 2025.12.23 |
Comments
