🔍 내가 배운 내용 요약


  1. final"변경 금지", abstract"불완전한 설계도"
  2. 변수, 메서드, 클래스에 따라 의미가 달라짐
  3. 추상 클래스/메서드는 반드시 상속오버라이딩을 전제로 설계됨

📚 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
의미 더 이상 변경 불가 미완성, 반드시 오버라이드 필요
클래스 상속 불가 상속 필수
메서드 오버라이딩 금지 반드시 오버라이딩
변수 값 변경 불가 (상수) ❌ 사용 불가
객체 생성 가능 (일반 클래스) 불가능 (추상 클래스)