IT Developer/Java

Java 기초 <6. 인터페이스와 추상 클래스의 차이>

TEMA_ 2025. 3. 7. 09:47
반응형

자바 Java

6. 인터페이스와 추상 클래스의 차이

 

안녕하세요! 태마입니다.

Java 기초 강좌입니다.

 

강좌의 경우 

1. 주제 간단 정리

2. 상세 주제 정리

으로 이루어져 있습니다.

 

자바 Java

포스팅 시작하겠습니다 :)

 

1. 주제 간단 정리

 

1. 추상 클래스(Abstract Class)란?

추상 클래스완전히 구현되지 않은 메서드를 포함할 수 있는 클래스입니다.
상속을 통해 구체적인 구현을 제공해야 합니다.
✔ 추상 클래스는 일반 메서드와 추상 메서드를 모두 가질 수 있으며, abstract 키워드로 선언됩니다.
직접 객체를 생성할 수 없으며, 자식 클래스에서 상속받아 사용합니다.

추상 클래스 선언 예제

abstract class Animal {
    String name;

    // 일반 메서드
    public void eat() {
        System.out.println(name + "가 음식을 먹습니다.");
    }

    // 추상 메서드 (구현이 없음)
    public abstract void makeSound();
}

class Dog extends Animal {
    public Dog(String name) {
        this.name = name;
    }

    // 추상 메서드 구현
    @Override
    public void makeSound() {
        System.out.println(name + "가 멍멍 소리를 냅니다.");
    }
}

public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog("바둑이");
        dog.eat(); // "바둑이가 음식을 먹습니다."
        dog.makeSound(); // "바둑이가 멍멍 소리를 냅니다."
    }
}

 

📌 추상 클래스의 특징
✔ abstract 키워드를 사용하여 추상 클래스를 정의
일부 메서드는 구현하고 일부는 추상 메서드로 남겨둘 수 있음
객체를 직접 생성할 수 없으며, 반드시 하위 클래스에서 구현해야 함


 

2. 인터페이스(Interface)란?

인터페이스클래스가 구현해야 하는 메서드들의 선언만 포함된 설계도입니다.
✔ **모든 메서드는 자동으로 abstract**로 간주되고 구현은 자식 클래스가 제공합니다.
다중 상속이 가능하여 여러 개의 인터페이스를 구현할 수 있습니다.

인터페이스 선언 예제

interface Animal {
    void makeSound(); // 추상 메서드
}

class Dog implements Animal {
    public void makeSound() {
        System.out.println("멍멍!");
    }
}

public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.makeSound(); // "멍멍!" 출력
    }
}

📌 인터페이스의 특징
모든 메서드는 기본적으로 추상 메서드
다중 상속이 가능 → 여러 개의 인터페이스를 동시에 구현할 수 있음
구현체는 반드시 implements 키워드를 사용하여 인터페이스를 구현해야 함


 

3. 추상 클래스 vs 인터페이스

비교 항목추상 클래스(Abstract Class)인터페이스(Interface)

상속 방식 extends 키워드 사용 implements 키워드 사용
다중 상속 가능 여부 ❌ 단일 상속만 가능 ✅ 다중 구현 가능
메서드 구성 일반 메서드 + 추상 메서드 포함 가능 모든 메서드가 추상 메서드
변수 선언 private/protected/public 가능 public static final (자동 적용)
사용 목적 공통된 기능을 포함하면서 확장 여러 클래스가 공통 기능을 구현하도록 강제

📌 한 마디로 정리하면?
추상 클래스 → "기본적인 기능을 제공하면서 추가적인 기능을 확장 가능하게 하고 싶을 때"
인터페이스 → "여러 클래스에서 같은 동작을 강제하고 싶을 때"

반응형

2. 상세 주제 정리

 

1. 추상 클래스 활용 예제

추상 클래스는 상속을 통해 공통된 기능을 제공하고, 구체적인 동작은 자식 클래스에서 구현하도록 합니다.

추상 클래스 활용 예제 (동물 클래스)

abstract class Animal {
    String name;

    public Animal(String name) {
        this.name = name;
    }

    // 일반 메서드
    public void eat() {
        System.out.println(name + "가 음식을 먹습니다.");
    }

    // 추상 메서드
    public abstract void makeSound();
}

class Dog extends Animal {
    public Dog(String name) {
        super(name);
    }

    public void makeSound() {
        System.out.println(name + "가 멍멍 소리를 냅니다.");
    }
}

class Cat extends Animal {
    public Cat(String name) {
        super(name);
    }

    public void makeSound() {
        System.out.println(name + "가 야옹 소리를 냅니다.");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal dog = new Dog("바둑이");
        dog.eat(); // "바둑이가 음식을 먹습니다."
        dog.makeSound(); // "바둑이가 멍멍 소리를 냅니다."

        Animal cat = new Cat("냥이");
        cat.eat(); // "냥이가 음식을 먹습니다."
        cat.makeSound(); // "냥이가 야옹 소리를 냅니다."
    }
}

📌 추상 클래스는 공통된 기능을 제공하고, 자식 클래스에서 구체적인 동작을 정의할 수 있도록 함!


 

2. 인터페이스 활용 예제

인터페이스는 여러 클래스에 동일한 기능을 강제하고 싶을 때 사용합니다. 다중 구현이 가능합니다.

인터페이스 활용 예제 (동물 인터페이스)

interface Animal {
    void makeSound(); // 추상 메서드
}

interface Swimmer {
    void swim(); // 추상 메서드
}

class Dog implements Animal {
    public void makeSound() {
        System.out.println("멍멍!");
    }
}

class Fish implements Animal, Swimmer {
    public void makeSound() {
        System.out.println("블르블르!");
    }

    public void swim() {
        System.out.println("물속을 헤엄칩니다.");
    }
}

public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.makeSound(); // "멍멍!"

        Fish fish = new Fish();
        fish.makeSound(); // "블르블르!"
        fish.swim(); // "물속을 헤엄칩니다."
    }
}

📌 인터페이스는 다중 상속이 가능하여, 여러 클래스를 동시에 구현할 수 있음!


지금까지 인터페이스와 추상 클래스의 차이와 활용 방법을 배웠어요!
👉 "이제 컬렉션 프레임워크(List, Set, Map)에 대해 배우고 싶다면?"
다음 회차에서 컬렉션 프레임워크의 개념과 활용을 다뤄봅시다!

반응형