JAVA

[JAVA] Abstract Class(추상 클래스)와 Interface (인터페이스)

그건모르겠고 2024. 7. 11. 14:08
728x90

추상 클래스 (Abstract Class)

설명

  • 정의: 추상 클래스는 하나 이상의 추상 메서드를 포함하는 클래스입니다. 추상 메서드는 구현이 없는 메서드로, 서브클래스에서 반드시 구현해야 합니다.
  • 특징:
    • 인스턴스를 직접 생성할 수 없음.
    • 추상 메서드뿐만 아니라 구현된 메서드도 포함할 수 있음.
    • 상태(필드)와 구현(메서드)을 가질 수 있음.
    • 단일 상속만 가능.

용도

  • 기본 구현 제공: 공통된 기능을 자식 클래스에 제공하면서, 일부 메서드는 자식 클래스에서 구현하도록 강제하고 싶을 때 사용.
  • 코드 재사용: 상속을 통해 코드 재사용을 목적으로 할 때 사용.

예제

// 추상 (부모) 클래스
abstract class Animal {
    // 필드
    private String name;

    // 생성자
    public Animal(String name) {
        this.name = name;
    }

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

    // 구현된 메서드
    public void sleep() {
        System.out.println(name + " is sleeping");
    }
}

// 자식 클래스
class Dog extends Animal {
    public Dog(String name) {
        super(name);
    }

    @Override
    public void makeSound() {
        System.out.println("Woof");
    }
}

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

    @Override
    public void makeSound() {
        System.out.println("Meow");
    }
}

 

인터페이스 (Interface)

설명

  • 정의: 인터페이스는 모든 메서드가 추상 메서드인 일종의 추상 타입입니다. 자바 8부터는 디폴트 메서드(기본 구현을 가진 메서드)와 정적 메서드도 포함할 수 있습니다.
  • 특징:
    • 모든 메서드는 기본적으로 추상적이며, public이며, 구현되지 않습니다.
    • 상태(필드)를 가질 수 없음, 단 상수는 가질 수 있음 (public static final).
    • 다중 상속이 가능 (여러 인터페이스를 구현할 수 있음).
    • 자바 8부터 디폴트 메서드와 정적 메서드를 가질 수 있음.
    • 자바 9부터 private 메서드를 가질 수 있음.

용도

  • 다중 상속: 클래스가 여러 타입을 구현해야 할 때 사용.
  • 행동의 명세: 클래스가 특정 행동을 하도록 명세할 때 사용.
  • 추상화 계층 제공: 다양한 클래스가 같은 인터페이스를 구현함으로써 코드의 유연성을 높임.

예제

// 인터페이스
interface Animal {
    // 추상 메서드
    void makeSound();

    // 디폴트 메서드 (Java 8+)
    default void sleep() {
        System.out.println("Sleeping");
    }
}

// 구현 클래스
class Dog implements Animal {
    @Override
    public void makeSound() {
        System.out.println("Woof");
    }
}

class Cat implements Animal {
    @Override
    public void makeSound() {
        System.out.println("Meow");
    }
}

차이점

특징 추상 클래스 (Abstract Class) 인터페이스 (Interface)
인스턴스 생성 인스턴스 생성 불가 인스턴스 생성 불가
메서드 추상 메서드와 구현된 메서드를 포함할 수 있음 모든 메서드는 추상 메서드, Java 8+에서는 디폴트 및 정적 메서드 포함 가능
필드 필드를 가질 수 있음 상수(public static final)만 가질 수 있음
상속 단일 상속 다중 상속 가능
용도 기본 구현 제공 및 코드 재사용 행동의 명세 및 다중 상속 구현

 

 

이와 같이 추상 클래스와 인터페이스를 통해 코드의 재사용성과 유연성을 높일 수 있으며, 상황에 따라 적절한 선택을 통해 더 나은 설계를 할 수 있습니다.