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

cowmin·2025년 7월 11일

1. 추상 클래스

1.1 추상클래스란?

추상적인 개념을 제공하는 클래스

1.2 추상 클래스 특징

  • 클래스를 선언할 때 abstract 키워드를 붙인다.
  • 객체를 생성할 수 없다.
  • 주로 다형성을 위해 사용된다.
  • 상속을 목적으로 사용되고, 부모 클래스 역할을 담당한다.
  • 상속받을 때는 모든 추상 메서드를 오버라이딩 해야한다.
  • 상속받을 때는 extends 키워드를 사용한다.
  • 하나의 추상 클래스만 상속받을 수 있다.
  • 인터페이스를 구현할 수 있다.

1.3 추상클래스 예시

public abstract class Animal {
	// 추상 메서드
    public abstract void sound();
   	// 일반 메서드
	public void move() {
    	System.out.println("동물이 움직입니다.")
    };
}
  • sound() 는 추상 메서드로 자식 클래스가 반드시 오버라이딩 해야 한다.
  • move() 는 일반 메서드로 자식 클래스가 오버라이딩 하지 않아도 된다.
public class Dog extends Animal {
      @Override
	  public void sound() {
      	  System.out.println("멍멍");
      }
}
public class Cat extends Animal {
      @Override
	  public void sound() {
      	  System.out.println("야옹");
      }
}


2. 인터페이스

2.1 인터페이스란?

구현을 강제하기 위한 명세를 제공하는 구조

2.2 인터페이스 특징

  • 인터페이스를 선언할 때 interface 키워드를 붙인다.
  • 객체를 생성할 수 없다.
  • 상속시 모든 추상 메서드를 오버라이딩 해야 한다.
    • 자바 8 이후부터는 default 메서드, static 메서드 사용 가능
  • 주로 다형성을 위해 사용된다.
  • 모든 메서드는 public abstract 이다. (생략 권장)
  • 모든 멤버 변수는 public static final 이다. (생략 권장)
    • 관례상 상수는 대문자에 언더스코어로 만든다.
  • 다중 구현(다중 상속)이 가능하다.
  • 상속받을 떄는 implements 라는 구현 키워드를 사용한다.
  • 인터페이스는 또 다른 인터페이스를 구현할 수 있다.

2.3 인터페이스 예제

public interface Animal {
	  // 멤버 변수(상수)
	  double MY_PI = 3.14;
      
      // default 메서드
      default void move() {
      		System.out.println("동물이 움직입니다.");
      }
      
      // 추상 메서드
	  void sound();
}
  • sound() 는 추상 메서드로 자식 클래스가 반드시 오버라이딩 해야 한다.
  • move() 는 default 메서드로 자식 클래스가 오버라이딩 하지 않아도 된다.
public class Dog implements Animal {
      @Override
	  public void sound() {
      		System.out.println("멍멍");
	  }
}
public class Cat implements Animal {
      @Override
	  public void sound() {
      		System.out.println("야옹");
	  }
}


3. 추상 클래스와 인터페이스

3.1 상속 vs 구현

부모 클래스의 기능을 자식 클래스가 상속 받을 때, 클래스는 상속 받는다고 표현하지만, 부모 인터페이스의 기능을 자식이 상속 받을 때는 인터페이스를 구현한다고 표현한다. 상속은 이름 그대로 부모의 기능을 물려 받는 것이 목적이고 인터페이스는 모든 메서드가 추상 메서드이기때문에 물려받을 수 있는 기능이 없고, 오히려 인터페이스에 정의한 모든 메서드를 자식이 오버라이딩해서 기능을 구현하기 때문이다.
인터페이스는 메서드 이름만 있는 설계도이고, 이 설계도가 실제 어떻게 작동하는지는 하위 클래스에서 모두 구현해야 한다. 따라서 인터페이스의 경우 상속이 아니라 해당 인터페이스를 구현한다고 표현한다.

3.2 추상 클래스 vs 인터페이스

구분추상 클래스인터페이스
선언 키워드abstractinterface
상속 키워드extendsimplements
상속/구현 개수1개 클래스만 상속 가능여러 개 인터페이스 구현 가능
구현 메서드일반 메서드 포함 가능자바 8부터 default, static 메서드 가능
목적상속을 통한 기능 공유기능 약속 및 다형성 제공

0개의 댓글