🔍 내가 배운 내용 요약
final
은 "변경 금지", abstract
는 "불완전한 설계도"📚 final 제어자
사용 위치 | 의미 | 설명 | 예시 |
---|---|---|---|
변수 | 상수 | 값 변경 불가 (한 번만 초기화 가능) | final int MAX = 100; |
메서드 | 오버라이딩 금지 | 하위 클래스에서 재정의 불가 | final void run() {} |
클래스 | 상속 금지 | 다른 클래스가 확장 불가 | final class MathUtils {} |
✅ final 예시 코드
Java
public final class MathUtil {
public static final double PI = 3.14159;
public final void printPI() {
System.out.println(PI);
}
}
// 하위 클래스 정의 불가!
// class MyMath extends MathUtil ❌ (컴파일 오류)
📚 abstract 제어자
사용 위치 | 의미 | 설명 | 예시 |
---|---|---|---|
클래스 | 추상 클래스 | 객체 생성 불가, 반드시 상속 필요 | abstract class Animal {} |
메서드 | 추상 메서드 | 구현 없이 선언만, 하위 클래스가 구현 | abstract void sound(); |
✅ abstract 예시 코드
Java
// 추상 클래스
abstract class Animal {
String name;
// 추상 메서드 (몸체 없음)
abstract void sound();
// 일반 메서드
void eat() {
System.out.println("먹습니다.");
}
}
// 구체 클래스
class Dog extends Animal {
@Override
void sound() {
System.out.println("멍멍!");
}
}
Java
// Animal a = new Animal(); ❌ 객체 생성 불가
Animal d = new Dog(); // 다형성 OK
d.sound(); // 출력: 멍멍!
✅ final vs abstract 비교 정리
구분 | final |
abstract |
---|---|---|
의미 | 더 이상 변경 불가 | 미완성, 반드시 오버라이드 필요 |
클래스 | 상속 불가 | 상속 필수 |
메서드 | 오버라이딩 금지 | 반드시 오버라이딩 |
변수 | 값 변경 불가 (상수) | ❌ 사용 불가 |
객체 생성 | 가능 (일반 클래스) | 불가능 (추상 클래스) |