본문 바로가기
프로그래밍/Java

[Java] Interface와 Abstract Class의 차이

by 시간많은백수 2023. 10. 11.
반응형

💡Interface

  • 추상 메서드만 포함: 인터페이스는 추상 메서드의 집합으로 이루어져 있습니다. 추상 메서드는 구현 내용이 없고 메서드 시그니처만 정의됩니다. 클래스가 인터페이스를 구현하면 해당 클래스는 인터페이스에 정의된 모든 메서드를 구현해야 합니다.
  • 다중 상속 지원: Java에서 클래스는 단일 상속만 허용되지만, 여러 인터페이스를 구현할 수 있습니다. 이로 인해 다중 상속의 일부 장점을 활용할 수 있습니다.
  • 구현을 강제함: 클래스가 인터페이스를 구현하면 그 인터페이스에 정의된 모든 메서드를 반드시 구현해야 합니다. 이를 통해 특정한 동작을 보장하고, 코드의 일관성을 유지합니다.
  • 인스턴스 생성 불가: 인터페이스는 객체를 직접 생성할 수 없습니다. 따라서 인터페이스를 구현한 클래스의 인스턴스를 생성하여 사용합니다.
  • 인터페이스 상속: 인터페이스는 다른 인터페이스를 상속받을 수 있습니다. 이를 통해 인터페이스 간의 계층 구조를 형성할 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
interface Drawable {
    void draw();
}
 
class Circle implements Drawable {
    @Override
    public void draw() {
        // 구현
    }
}
 
 
cs

 

💡 추상 클래스 (Abstract Class)

  • 일반 메서드 포함 가능: 추상 클래스는 추상 메서드 외에도 일반 메서드를 포함할 수 있습니다. 이러한 일반 메서드는 구현 내용이 있어도 되며 하위 클래스에서 오버라이딩할 수도 있습니다.
  • 단일 상속 지원: Java에서 클래스는 단일 상속만 허용됩니다. 따라서 추상 클래스는 하나의 클래스만 상속할 수 있습니다.
  • 구현을 선택적으로 함: 추상 클래스는 추상 메서드를 가질 수 있지만 모든 메서드가 추상일 필요는 없습니다. 하위 클래스에서 추상 메서드를 구현하는 것은 선택적입니다.
  • 인스턴스 생성 불가: 추상 클래스는 직접 인스턴스화할 수 없습니다. 하위 클래스에서 상속된 메서드를 통해 인스턴스를 생성해야 합니다.
  • 추상 클래스 상속: 다른 추상 클래스나 일반 클래스를 상속받을 수 있습니다. 이를 통해 클래스 간의 계층 구조를 형성할 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
abstract class Shape {
    int x, y;
 
    abstract void draw(); // 추상 메서드
 
    void move() {
        // 구현
    }
}
 
class Circle extends Shape {
    @Override
    void draw() {
        // 구현
    }
}
 
 
cs

 

💻결론

인터페이스 - 다중 상속을 지원하고, 클래스 간의 관련성이 없는 다양한 클래스가 특정 동작을 공유할 때 유용합니다.

추상 클래스 - 공통된 기능을 가지는 클래스들 사이에 상속 관계가 있을 때 유용하며, 추상 메서드와 일반 메서드를 함께 사용하여 일반적인 구현을 제공할 때 유용합니다.

반응형