본문 바로가기
자바 (JAVA)

📚 JAVA 7강: 객체 지향 프로그래밍 (OOP) - 추상 클래스와 인터페이스

by demianpark127 2025. 1. 3.
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 추상 클래스 특징

  1. 객체 생성 불가: 추상 클래스는 인스턴스화할 수 없습니다.
  2. 추상 메서드: 상속받은 클래스에서 반드시 오버라이딩해야 합니다.
  3. 일반 메서드 포함 가능: 추상 클래스는 일반 메서드도 포함할 수 있습니다.

🚀 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 인터페이스 특징

  1. 모든 메서드가 추상 메서드 (Java 8 이전)
  2. 다중 상속 가능: 한 클래스가 여러 인터페이스를 구현할 수 있습니다.
  3. default 메서드와 static 메서드` 지원: Java 8부터 가능
  4. 필드(변수)는 항상 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. 학습 목표

  1. 추상 클래스와 인터페이스의 개념과 차이를 이해한다.
  2. 추상 메서드를 사용해 강제 구현을 유도할 수 있다.
  3. 인터페이스를 통해 다중 상속을 활용할 수 있다.
  4. abstract와 interface 키워드를 적절히 사용할 수 있다.

다음 강의 예고: 8강 - 예외 처리 (Exception Handling)

다음 강의에서는 **Java의 예외 처리(Exception Handling)**에 대해 학습합니다. 😊

 
 
LIST