추상 클래스 인터페이스 차이점

그냥 준현·2024년 6월 21일
0

Computer Science

목록 보기
8/16

Java에서 추상 클래스(Abstract Class)와 인터페이스(Interface)는 객체 지향 프로그래밍의 핵심 개념으로, 다형성을 구현하는 데 중요한 역할을 합니다.
그러나 이 둘은 서로 다른 목적과 용도로 설계되었습니다.
이 글에서는 추상 클래스와 인터페이스의 특징과 차이점에 대해 알아보겠습니다.

🌿 추상 클래스

추상 클래스는 하나 이상의 추상 메소드를 포함하는 클래스입니다.

추상 메소드는 구현되지 않은 메소드로, 이를 상속받는 하위 클래스에서 반드시 구현해야 합니다.
추상 클래스는 자체는 인스턴스화할 수 없으며(= new 연산자 사용 X), 다른 클래스가 이를 상속받아 구체적인 구현을 제공해야 합니다.

추상 클래스의 특징

  1. 추상 메소드: 구현되지 않은 메소드를 포함할 수 있습니다.
abstract class Animal {
    abstract void sound();
}
  1. 구체 메소드: 구현된 메소드를 포함할 수 있습니다.
abstract class Animal {
    void eat() {
        System.out.println("The animal eats");
    }
}
  1. 인스턴스화 불가: new 연산자로 직접 인스턴스화 할 수 없습니다.
public static void main(String[] args) {
    Animal dog = new Animal(); // 불가능!
}
  1. 다중 상속 불가: 한 번에 하나의 추상 클래스만 상속할 수 있습니다.
class Dog implements Animal, Male { // 불가능!
    public void sound() {
        System.out.println("The dog barks");
    }
    
    public void protect() {
        System.out.println("The dog protects");
    }
}

✨ 인터페이스

인터페이스의 모든 메소드는 추상 메소드입니다.

인터페이스는 클래스가 구현해야 하는 메소드의 청사진을 정의합니다.
Java 8 이후로 deafult 메소드와 static 메소드도 포함할 수 있습니다.
인터페이스는 다중 상속을 허용하여, 하나의 클래스가 여러 인터페이스를 구현할 수 있습니다.

인터페이스의 특징

  1. 추상 메소드: 모든 메소드는 기본적으로 추상 메소드입니다. abstract 키워드를 생략할 수 있습니다.
interface Animal {
    void sound();
}
  1. 구체 메소드 가능: Java 8 이후 default, static 메소드를 포함할 수 있습니다.
interface Animal {
    static void sound() {
        System.out.println("");
    }
}
  1. 인스턴스화 불가: new 연산자로 직접 인스턴스화 할 수 없습니다.
public static void main(String[] args) {
    Animal dog = new Animal(); // 불가능!
}
  1. 다중 상속 가능: 하나의 클래스가 여러 인터페이스를 구현할 수 있습니다.
class Dog implements Animal, Male { // 가능!
    public void sound() {
        System.out.println("The dog barks");
    }
    
    public void protect() {
        System.out.println("The dog protects");
    }
}
  1. 상수 포함 가능: static, final 상수를 포함할 수 있습니다.
interface Animal {
    static final int leg = 4;
}

🔀 추상 클래스와 인터페이스의 차이점

특징 추상 클래스 인터페이스
메소드 구현 구체 메소드와 추상 메소드 모두 포함 기본적으로 추상 메소드만 포함, Java 8 이후 `default`, `static` 메소드 포함 가능
인스턴스화 불가능 불가능
다중 상속 불가능 가능
생성자 가질 수 있음 가질 수 없음
필드 인스턴스 변수, 상수 가능 상수만 가능 (`static`, `final`)

🤔 사용 시기

추상 클래스

  1. 공통된 코드 재사용
    여러 하위 클래스에서 공통적으로 사용되는 코드를 추상 클래스에서 정의할 때
  2. 상속의 계층 구조
    상속의 계층 구조가 명확할 때

인터페이스

  1. 다중 상속 필요
    클래스가 여러 인터페이스를 구현해야 할 때
  2. 구현 강제
    특정 메소드를 반드시 구현하도록 강제할 때
profile
잘해야 재밌어

0개의 댓글

관련 채용 정보