Java 추상클래스와 인터페이스

윤성모·2025년 2월 13일

추상클래스 (Abstract Class)

  • 추상클래스는 객체를 생성할 수 없는 클래스로, abstract를 사용하여 선언된다.
    일반적인 클래스처럼 변수와 메서드를 가질 수 있지만, 하나 이상의 추상메서드를 포함할 수 있다.

  • 추상메서드란 메서드를 선언만하고 구현은 하위 클래스에서 오버라이드하는 메서드를 의미한다.

  • 일반적인 메서드 또한 가질 수 있다.

  • 직접 객체 생성은 불가능하지만, 생성자를 통해 자식클래스에서 호출이 가능하다.

  • 변수와 메서드에 접근제어자를 사용할 수 있다.

  • 다중 상속은 불가능하다.

  • 부모클래스에서 공통 기능을 구현하고, 일부 메서드를 하위클래스의 특징에 맞게 구현을 강제할 때 사용한다.

  • 코드의 재사용성을 높혀준다.

// 추상 클래스 선언
abstract class Animal {
    String name;

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

    // 추상 메서드 (구현 없이 선언만)
    abstract void makeSound();

    // 일반 메서드
    void sleep() {
        System.out.println(name + " is sleeping.");
    }
}
// 추상 클래스를 상속하는 하위 클래스
class Dog extends Animal {
    Dog(String name) {
        super(name);
    }

    // 추상 메서드 구현 (반드시 오버라이딩해야 함)
    @Override
    void makeSound() {
        System.out.println(name + " says: Woof! Woof!");
    }
}
public class Main {
    public static void main(String[] args) {
        Dog dog = new Dog("Buddy");
        dog.makeSound(); // "Buddy says: Woof! Woof!"
        dog.sleep(); // "Buddy is sleeping."
    }
}

인터페이스

  • 인터페이스는 완전히 추상적인 클래스로, 모든 메서드는 기본적으로 abstract이며, 구현부가 없다. 즉 추상메서드와 상수만을 포함할 수 있는 구조이다. abstract키워드는 생략해도 자동 적용된다.

  • 모든변수는 public static final(상수)이다.

  • 다중 구현이 가능하다. 클래스는 하나만 상속이 가능하지만, 인터페이스는 여러개 구현이 가능하다.

  • Java 8 이후부터는 default 및 static 메서드 추가가 가능하다.

  • default 메서드 : 기본 구현을 제공하는 메서드(오버라이딩 가능)

  • static 메서드 : 인스턴스 없이 호출 가능한 정적 메서드

  • 클래스 간의 공통된 행동을 정의하고 싶을 때

  • 다중 상속이 필요할 때

  • 구현을 강제하고 싶을 때

// 인터페이스 선언
interface Animal {
    // 추상 메서드 (자동으로 public abstract)
    void makeSound();

    // Java 8부터 추가된 default 메서드
    default void sleep() {
        System.out.println("Sleeping...");
    }
}
// 클래스에서 인터페이스 구현
class Cat implements Animal {
    @Override
    public void makeSound() {
        System.out.println("Meow! Meow!");
    }
}
public class Main {
    public static void main(String[] args) {
        Cat cat = new Cat();
        cat.makeSound(); // "Meow! Meow!"
        cat.sleep(); // "Sleeping..."
    }
}
비교 항목추상 클래스 (Abstract Class)인터페이스 (Interface)
객체생성불가능불가능
메서드일반메서드 + 추상메서드only 추상메서드(default, static 메서드 가능)
변수일반 변수 선언 가능상수만 선언 가능
생성자있음없음
다중 상속불가능가능
사용 목적상속을 통해 기능을 확장다형성을 극대화하고, 특정 기능을 강제
profile
Java / Spring 개발 공부 일지

0개의 댓글