SMALL
    📚 7강: 객체 지향 프로그래밍 (OOP) - 추상 클래스와 인터페이스
🚀 1. 추상 클래스(Abstract Class)
📌 1.1 추상 클래스란?
- 추상 클래스는 객체를 생성할 수 없는 클래스입니다.
- abstract 키워드를 사용하여 정의합니다.
- 공통된 속성과 기능을 정의하고, 상속받은 클래스에서 반드시 구현해야 할 메서드를 지정할 수 있습니다.
📌 1.2 추상 클래스 문법
abstract class Animal {
    // 일반 메서드
    void eat() {
        System.out.println("동물이 먹습니다.");
    }
    // 추상 메서드 (선언만, 구현 X)
    abstract void sound();
}📌 1.3 추상 클래스 사용 예제
// 추상 클래스
abstract class Animal {
    abstract void sound(); // 추상 메서드
    void sleep() {
        System.out.println("동물이 잠을 잡니다.");
    }
}
// 구체 클래스: Dog
class Dog extends Animal {
    @Override
    void sound() {
        System.out.println("강아지가 멍멍 짖습니다.");
    }
}
// 구체 클래스: Cat
class Cat extends Animal {
    @Override
    void sound() {
        System.out.println("고양이가 야옹 울습니다.");
    }
}
// 메인 클래스
public class AbstractExample {
    public static void main(String[] args) {
        Animal dog = new Dog();
        Animal cat = new Cat();
        dog.sound(); // 강아지가 멍멍 짖습니다.
        cat.sound(); // 고양이가 야옹 울습니다.
        dog.sleep(); // 동물이 잠을 잡니다.
    }
}
📌 출력 결과:
강아지가 멍멍 짖습니다.
고양이가 야옹 울습니다.
동물이 잠을 잡니다.📌 1.4 추상 클래스 특징
- 객체 생성 불가: 추상 클래스는 인스턴스화할 수 없습니다.
- 추상 메서드: 상속받은 클래스에서 반드시 오버라이딩해야 합니다.
- 일반 메서드 포함 가능: 추상 클래스는 일반 메서드도 포함할 수 있습니다.
🚀 2. 인터페이스 (Interface)
📌 2.1 인터페이스란?
- 인터페이스는 클래스가 구현해야 할 메서드의 목록을 정의합니다.
- 모든 메서드는 추상 메서드이며, default, static 메서드도 포함될 수 있습니다.
- 다중 상속이 가능합니다.
📌 2.2 인터페이스 문법
interface Animal {
    void sound(); // 추상 메서드
    void sleep(); // 추상 메서드
}
📌 2.3 인터페이스 사용 예제
// 인터페이스
interface Animal {
    void sound(); // 추상 메서드
    void eat();   // 추상 메서드
}
// 클래스에서 인터페이스 구현
class Dog implements Animal {
    @Override
    public void sound() {
        System.out.println("강아지가 멍멍 짖습니다.");
    }
    @Override
    public void eat() {
        System.out.println("강아지가 사료를 먹습니다.");
    }
}
class Cat implements Animal {
    @Override
    public void sound() {
        System.out.println("고양이가 야옹 울습니다.");
    }
    @Override
    public void eat() {
        System.out.println("고양이가 생선을 먹습니다.");
    }
}
// 메인 클래스
public class InterfaceExample {
    public static void main(String[] args) {
        Animal dog = new Dog();
        Animal cat = new Cat();
        dog.sound(); // 강아지가 멍멍 짖습니다.
        dog.eat();   // 강아지가 사료를 먹습니다.
        cat.sound(); // 고양이가 야옹 울습니다.
        cat.eat();   // 고양이가 생선을 먹습니다.
    }
}
📌 출력 결과:
강아지가 멍멍 짖습니다.
강아지가 사료를 먹습니다.
고양이가 야옹 울습니다.
고양이가 생선을 먹습니다.📌 2.4 인터페이스 특징
- 모든 메서드가 추상 메서드 (Java 8 이전)
- 다중 상속 가능: 한 클래스가 여러 인터페이스를 구현할 수 있습니다.
- default 메서드와 static 메서드` 지원: Java 8부터 가능
- 필드(변수)는 항상 public static final
🚀 3. 추상 클래스 vs 인터페이스
| 비교 항목 | 추상 클래스 | 인터페이스 | 
| 목적 | 공통 기능 제공 | 표준화 및 규칙 제공 | 
| 메서드 종류 | 일반 메서드 + 추상 메서드 | 모든 메서드는 추상 메서드 (Java 8 이전) | 
| 다중 상속 | 불가능 | 가능 | 
| 생성자 | 있음 | 없음 | 
| 사용 키워드 | abstract class | interface | 
🚀 4. 실습 과제
✅ 1. 추상 클래스 실습
- Shape 추상 클래스를 만들고 draw() 메서드를 선언하세요.
- Circle과 Rectangle 클래스를 상속받고 draw()를 오버라이딩하세요.
- 메인 메서드에서 두 객체를 생성하고 draw()를 호출하세요.
// 추상 클래스: Shape
abstract class Shape {
    abstract void draw(); // 추상 메서드
}
// Circle 클래스 (Shape 상속)
class Circle extends Shape {
    @Override
    void draw() {
        System.out.println("원을 그립니다.");
    }
}
// Rectangle 클래스 (Shape 상속)
class Rectangle extends Shape {
    @Override
    void draw() {
        System.out.println("사각형을 그립니다.");
    }
}
// 메인 클래스
public class AbstractShapeExample {
    public static void main(String[] args) {
        // 추상 클래스의 하위 객체 생성
        Shape circle = new Circle();
        Shape rectangle = new Rectangle();
        // 각 객체의 draw() 메서드 호출
        circle.draw(); // 원을 그립니다.
        rectangle.draw(); // 사각형을 그립니다.
    }
}✅ 2. 인터페이스 실습
- Flyable 인터페이스를 만들고 fly() 메서드를 선언하세요.
- Bird와 Airplane 클래스를 구현하세요.
- 두 객체의 fly() 메서드를 호출하세요.
// 인터페이스: Flyable
interface Flyable {
    void fly(); // 추상 메서드
}
// Bird 클래스 (Flyable 구현)
class Bird implements Flyable {
    @Override
    public void fly() {
        System.out.println("새가 하늘을 날아갑니다.");
    }
}
// Airplane 클래스 (Flyable 구현)
class Airplane implements Flyable {
    @Override
    public void fly() {
        System.out.println("비행기가 하늘을 날아갑니다.");
    }
}
// 메인 클래스
public class InterfaceFlyableExample {
    public static void main(String[] args) {
        // 인터페이스 구현 객체 생성
        Flyable bird = new Bird();
        Flyable airplane = new Airplane();
        // 각 객체의 fly() 메서드 호출
        bird.fly(); // 새가 하늘을 날아갑니다.
        airplane.fly(); // 비행기가 하늘을 날아갑니다.
    }
}🎯 5. 학습 목표
- 추상 클래스와 인터페이스의 개념과 차이를 이해한다.
- 추상 메서드를 사용해 강제 구현을 유도할 수 있다.
- 인터페이스를 통해 다중 상속을 활용할 수 있다.
- abstract와 interface 키워드를 적절히 사용할 수 있다.
✅ 다음 강의 예고: 8강 - 예외 처리 (Exception Handling)
다음 강의에서는 **Java의 예외 처리(Exception Handling)**에 대해 학습합니다. 😊
LIST
    '자바 (JAVA)' 카테고리의 다른 글
| 📚 JAVA 9강: 컬렉션 프레임워크 (Collection Framework) (0) | 2025.01.03 | 
|---|---|
| 📚 JAVA 8강: 예외 처리 (Exception Handling) (0) | 2025.01.03 | 
| 📚 JAVA 6강: 객체 지향 프로그래밍 (OOP) - 상속과 오버라이딩 (0) | 2025.01.03 | 
| 📚 JAVA 5강: 객체 지향 프로그래밍 (OOP) - 클래스와 객체 (0) | 2025.01.03 | 
| 📚 JAVA 4강: 배열과 문자열 (1) | 2025.01.03 |