Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

집 짓는 개발블로그

(Java) 추상메서드와 인터페이스 본문

Java

(Java) 추상메서드와 인터페이스

취준er 2024. 11. 19. 22:04

자바 기술질문 중에 가장 흔한 추상메서드와 인터페이스의 차이에 대해 알아본다.

면접 앞두고는 3번만 보면 될 거 같음

 

 

1. 추상 클래스 (Abstract Class)

 

정의: 추상 클래스는 abstract 키워드로 선언되며, 일부 메서드는 구현되고 일부는 구현되지 않을 수 있습니다.

용도: 클래스 간의 공통 기능을 정의하고, 이를 상속받는 하위 클래스가 세부 구현을 완성하도록 강제합니다.

특징:

일반 메서드와 추상 메서드를 모두 가질 수 있음.

상태(멤버 변수)를 가질 수 있음.

extends를 통해 한 클래스만 상속 가능.

생성자를 가질 수 있음.

 

예시 코드:

abstract class Animal {
    String name;

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

    // 추상 메서드 (구현 강제)
    abstract void sound();

    // 일반 메서드
    void eat() {
        System.out.println(name + " is eating.");
    }
}

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

    @Override
    void sound() {
        System.out.println(name + " says Woof!");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal dog = new Dog("Buddy");
        dog.sound(); // Buddy says Woof!
        dog.eat();   // Buddy is eating.
    }
}

 

 

 

2. 인터페이스 (Interface)

 

정의: 인터페이스는 interface 키워드로 선언되며, 구현만을 정의하는 메서드 집합입니다.

용도: 클래스가 특정 동작을 구현하도록 강제하거나, 여러 클래스 간 공통된 행동을 정의합니다.

특징:

모든 메서드는 기본적으로 public abstract (Java 8 이후 defaultstatic 메서드 허용).

멤버 변수는 기본적으로 public static final (상수만 가능).

다중 구현 가능 (implements로 여러 인터페이스를 구현).

상태(멤버 변수)를 가질 수 없음.

 

예시 코드:

interface AnimalBehavior {
    void sound(); // 추상 메서드
    void eat();   // 추상 메서드
}

class Cat implements AnimalBehavior {
    @Override
    public void sound() {
        System.out.println("Cat says Meow!");
    }

    @Override
    public void eat() {
        System.out.println("Cat is eating.");
    }
}

public class Main {
    public static void main(String[] args) {
        AnimalBehavior cat = new Cat();
        cat.sound(); // Cat says Meow!
        cat.eat();   // Cat is eating.
    }
}

 

3. 주요 차이점

기준 추상클래스 인터페이스
선언 키워드 abstract class interface
상속 및 구현 한 클래스만 상속 가능(extends) 다중 구현 가능(implements)
메서드 타입 일반 메서드+추상 메서드 가능 기본적으로 추상 메서드만 가능
(Java 8 이후 default메서드 추가)
멤버 변수 인스턴스 변수+상수 가능 상수만 가능(public static final)
생성자 생성자 허용 생성자 불가

 

 

4. 언제 사용해야 할까?

 

추상 클래스: 클래스 간의 “is-a” 관계가 있고, 공통 속성과 메서드가 있는 경우.

예: Animal 클래스 → Dog, Cat

인터페이스: 클래스 간의 “can-do” 관계를 나타내야 할 때, 혹은 다중 상속이 필요한 경우.

예: AnimalBehavior 인터페이스 → Flyable, Swimmable