Backend/Java

인터페이스와 추상화 클래스(interface VS abstract class)

개발자의 첫 걸음 2025. 7. 12. 13:53

 

안녕하세요. 오늘은 인터페이스와 추상화 클래스의 차이점을 알아볼 거예요.

 

이 친구들을 알아보기 전 공통점은 미완성된 설계도 역할이라는 점인데요.

 

역할을 같지만 사용하는 방식이 달라서 같이 알아볼까요?

 

 

인터페이스(interface)

 

인터페이스는 간단하게 "계약서" 같은 친구예요.

 

행동의 형태(메서드 이름, 매개 변수)만 정해놓고, 

 

실제 어떻게 할지는 나중에 각각 다르게 구현 가능하게 해 주는데요.

 

그리고 여러 개를 동시에 구현할 수 있답니다.

// 1. 인터페이스 정의
public interface Animal {
    void makeSound();  // 몸체 없는 메서드
}

// 2. 인터페이스 구현(implements) 클래스
public class Dog implements Animal {
    @Override
    public void makeSound() {
        System.out.println("멍멍!");
    }
}

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

// 3. 사용 예시
public class Main {
    public static void main(String[] args) {
        Animal myDog = new Dog();
        Animal myCat = new Cat();

        myDog.makeSound();  // 출력: 멍멍!
        myCat.makeSound();  // 출력: 야옹~
    }
}

인터페이스는 서로 관련 없는 클래스들이 같은 기능을 할 때,

 

그리고 다중 상속과 구현이 필요할 때 사용한답니다.

 

 

 

추상화 클래스(abstract class)

 

추상화 클래스는 간단하게 "부분 완성된 설계도"  같아요.

 

이 친구는 일부는 이미 만들어져 있고, 나머지는 자식 클래스꼭 구현해야 하는 추상 메서드를 남겨둬요.

 

그리고 단일 상속만 가능하고, 구체적인 구현을 포함할 수 있답니다.

abstract class Animal {
    void breathe() { System.out.println("숨 쉬어요"); }  // 구현된 메서드

    abstract void sound();  // 반드시 자식이 구현해야 함
}

class Dog extends Animal {
    void sound() { System.out.println("멍멍"); }
}

보통 관련된 클래스들의 공통 기능을 묶을 때기본 구현과 강제 구현을 동시에 주고 싶을 때 사용해요!

 

 

 

특징 인터페이스(interface) 추상 클래스 (abstract class)
상속 가능 수 다중 상속 가능 단일 상속만 가능
구현 방식 모든 메서드 기본 추상화 추상 메서드 + 구현 메서드 가능
변수 상수만 가능 일반 변수 가능
생성자 없음 있음

인터페이스와 추상 클래스의 차이점을 간단하게 표로 확인해주세요!

 

 

 

이렇게 인터페이스와 추상 클래스의 차이점을 알아봤는데요.

 

보면 볼수록 차이점이 하나 둘 보일 거예요.

 

한 번씩 복습하시면서 실제로 차이점을 이용해서

 

한번 코딩을 해보면서 배워보는 건 어떨까요?