추상클래스 VS 인터페이스

이준영·2023년 1월 30일
0

추상 클래스 (abstract class)

  • 추상 메서드를 포함하는 클래스는 반드시 abstract로 선언되어야 함
    // 물론 추상 메서드를 포함하지 않아도 abstract를 붙여 추상 클래스로 지정가능
  • 추상 메서드를 선언하고 상속을 통한 하위 클래스는 반드시 구현하도록 강제하는 클래스이다.
public abstract class Main 
{
   Public abstract void Method1();
   Public void Method2()  // 그냥 메서드도 추가 가능
   {
   	System.out.println();
   }
}

만약 이 Main클래스를 상속하는 클래스가 있다면
그 클래스는Method1을 반드시 구현해야 된다.
@override가 강제가 되는 것이다.
물론 일반 메서드인 Method2를 구현하는 것은 선택사항

추상 메서드란
선언부만 작성하고 구현부는 작성하지 않은 채로 남겨두는 것이 추상 메서드이며, 상속받는 클래스에 따라서 구현되는 내용이 달라진다.
// interface와 다르게 static이나 final이 아닌 필드를 가질 수 있고,
public protected, private 접근 제어자를 모두 사용할 수 있다.

abstract클래스 특징

  • Abstract를 선언하면 상속을 위한 클래스 임으로 new로 객체를 직접 생성할 수는 없다.
  • class이기 때문에 다중 상속은 당연히 불가능

인터페이스 (interface)

interface키워드를 사용하고
상수(static final)추상 메서드(abstract method)로 이루어져 있다.

interface의 특징

  • 일반 메서드, 일반 멤버 변수를 가질 수 없다.
  • 모든 메서드는public abstract로 선언된다.
    // 선언할 때 생략해도 컴파일시 자동으로 생성된다.
  • 모든 멤버 변수는 public static final로 선언된다.
    // 마찬가지로 생략 가능
  • 다중 상속이 가능하다

public static final를 사용하는 목적
인터페이스는 인스턴스가 존재할 수 없기 때문에 상속받은 구현 객체에서 같은 상태를 보장하기 위해서 public static final을 사용

단 JDK1.8 부터 default method의 추가로 인터페이스 에서도 method의 기능을 구현할 수 있다.

그럼 무슨 차이가 있을까?

추상클래스 VS 인터페이스

  • 추상 클래스에는 public, protected, private 메소드를 가질 수 있다.
    반면에 인터페이스는 public만 허용
  • 추상 클래스에는 멤버변수 선언이 가능하지만 인터페이스는 public static 변수만 선언이 가능
    // 멤버변수 : 메소드 밖 class내에서 선언되는 변수
  • 인터페이스는 implements 키워드로 여러 인터페이스를 구현할 수 있다.
    반면에 추상클래스는 extends 키워드로 1개의 클래스만 상속받을 수 있다.

주로 사용할때는 해당 클래스의 구분을 추상 클래스 상속을 통해서 해결하고, 할 수 있는 공통된 기능들을 인터페이스의 다중 상속을 통해 구현한다.
상위 클래스는 다중 상속이 불가능하기 때문에 하나의 클래스에서 하위 클래스에 물려줄 특성이 풍부할수록 좋고,
인터페이스는 다중 상속이 가능하기 때문에 각각의 인터페이스는 목적에 맞는 최소한의 메서드(구현을 강제할)를 선언하는 것이 좋다.

0개의 댓글