추상 클래스는 일반 클래스와 별 다를 것이 없다. 추상 메소드를 사용해서 상속을 통해 자식 클래스에서 완성하도록 유도하는 클래스인데, 이러한 구조 때문에 미완성 설계도라고 표현하기도 한다. 상속을 위한 클래스이기 때문에 따로 객체를 생성하는 것이 불가능하다.
아래는 추상 클래스와 추상 메소드의 선언 방법이다.
abstract class 클래스명{
//추상 메소드. 구현부가 존재하지 않는다. 선언만 한다.
public abstract void 메소드명();
}
그럼 이제 인터페이스를 보자. 추상 클래스가 미완성 설계도라면 인터페이스는 기본 설계도라고 할 수 있다. 인터페이스도 추상클래스처럼 다른 클래스를 작성하는 데 도움을 주는 목적으로 작성한다. 인터페이스는 추상클래스와는 다르게 다중 상속이 가능하다.
아래는 인터페이스의 상수 필드와 추상 메소드의 선언 방법이다.
interface 인터페이스명{
public static final 상수명 = 값; //값을 변경할 수 없는 정적 상수이다.
public abstract void 메소드명();//인터페이스에서는 abstract를 생략 가능하다.
}
이렇게 보면 상수 필드만 추가되었지 별 다른것이 없어 보인다.
하지만 추상클래스와 인터페이스의 차이점은 많다. 이 두가지의 차이점은 크게 사용 용도로 구분이 된다.
사용 용도로 구분이 되는 이유는 다중상속의 가능 여부가 가장 큰 이유이다. 자바 특성상 한 개의 클래스만 상속이 가능하여 해당 클래스의 구분을 추상 클래스 상속을 통해 해결하고, 할 수 있는 기능들을 인터페이스로 구현한다.
만약 모든 클래스가 인터페이스만을 상속해서 기본 틀을 구성한다면 공통으로 필요한 기능들도 모든 클래스에서 오버라이딩하여 재정의해야 하는 번거로움이 있다. 이렇게 공통된 기능이 필요하다면 추상 클래스를 이용해서 일반 메서드를 작성하여 자식 클래스에서 사용 할 수 있도록 하면 된다. 이렇게 된다면 그냥 추상 클래스만 상속해서 사용하면 되는게 아닌가 할 수 있겠지만 자바는 한 개의 클래스만 상속이 가능하므로 각각 다른 추상클래스를 상속하는데 공통된 기능이 필요하다면 해당 기능을 인터페이스로 작성해서 구현하는게 훨씬 편할 것이다.
'DEV > JAVA' 카테고리의 다른 글
자바의 차트 라이브러리 - JFreeChart (1) | 2023.10.12 |
---|---|
Java8부터 도입된 Stream(2) - Stream 중간처리 메소드 (0) | 2023.08.11 |
Java8부터 도입된 Stream(1) - Stream의 개념 (0) | 2023.08.11 |
인터페이스 정리 코드(자바) (0) | 2022.11.18 |