[Java] 추상클래스와 인터페이스
추상클래스(Abstract Class)란?
추상 클래스(Abstract Class)는 추상 메서드를 선언해 놓고 상속을 통해 자식 클래스에서 메서드를 완성하도록 유도하는 클래스이다.
이러한 특성 탓에 미완성 설계도라고 표현하기도 한다.
추상클래스는 상속을 위한 클래스이기 때문에 따로 인스턴스를 생성할 수 없다.
클래스라 함은 인스턴스를 생성해주는 템플릿 같은 개념이다. 그리고 이러한 인스턴스 객체 자료형을 사용하여 우리는 보다 구조적으로 프로그램을 설계할 수 있다.
추상 클래스는 클래스에 추상화를 접목시켜 보다 구조적이게 객체를 설계하고, 프로그램의 유지보수성을 올려주며, 만일 프로그램에 어떠한 기능을 업그레이드한다고 하면 수정 / 추가에 대해 유연적이게 해주어, 퀄리티 높은 프로그램과 솔루션을 개발할 수 있게 해준다.
추상 클래스와 메서드를 선언할 때는 abstract 키워드를 사용한다.
abstract class 클래스 {
public abstract void 메서드();
}
class 자식클래스 extends 클래스{
@Override
public void 매서드(){
... // 구현
}
}
추상 클래스는 extends 키워드를 통해 상속이 가능하다.
추상 메서드는 작동 로직은 없고 이름, 즉 껍데기만 있는 메서드이다.
즉, 메서드의 선언부만 작성하고 구현부는 미완성인 채로 남겨둔 메소드인 것이다.
보통 하나 이상의 추상 메서드를 포함하는 클래스를 가리켜 추상 클래스라고 정의하기도 한다.
추상 클래스 안의 메서드를 미완성으로 남겨놓는 이유는 추상 클래스를 상속받는 자식 클래스의 주제에 따라서 상속 받는 메서드의 내용이 달라질 수 있기 때문이다.
부모(추상) 클래스에서 메서드를 선언부만 작성하고, 실제 내용은 상속받는 클래스에서 구현하도록 하기 위해 일부러 비워두는 개념이라고 보면 된다.
추상클래스는 하위 클래스들의 공통점들을 모아 추상화하여 만든 클래스이고,
추상 메소드 외에 일반클래스와 같이 일반적인 필드, 메서드, 생성자를 가질 수 있다.
인터페이스(Interface)란?
인터페이스는 간단히 말하자면 프로그램을 설계하고 조금 더 유연한 프로그램을 만드는 기법을 말한다.
인터페이스는 추상화와 상속과 더불어 다형성이라는 객체 지향의 특징을 구현하는 핵심이다.
추상 클래스와 비슷하게 다른 클래스를 작성하는데 도움을 주는 목적으로 작성하지만,
추상 클래스보다 추상화 정도가 높아 추상 클래스와 다르게 구현부가 있는 일반 메서드, 일반 변수 멤버 등을 가질 수 없다.
즉, 인터페이스는 구현된 게 아무것도 없는 기본 설계도라고 할 수 있다.
인터페이스 또한 인스턴스를 생성할 수 없다.
interface 인터페이스 {
public static final 상수 = 값;
public abstract void 메서드();
}
인터페이스의 모든 메서드는 public abstract, 즉 추상 메서드이다.
해당 클래스에 인터페이스를 구현하고 싶다면, implements 키워드를 쓴 후에 인터페이스를 나열하면 된다.
인터페이스를 상속 받았으면, 자식 클래스에서 인터페이스가 포함하고 있는 추상 메소드를 구체적으로 구현해준다.
인터페이스는 여러개를 다중 구현(다중 상속)하는 것이 가능하다.
자식 클래스에 클래스 상속(extends)와 인터페이스 구현(implements)는 동시에 가능하다.