추상 클래스 VS 인터페이스

J-USER·2021년 10월 11일
0

JAVA

목록 보기
5/5
post-thumbnail

이것을 왜 쓰나...?

추상클래스

추상클래스는 일반 클래스와 별 다를 것이 없습니다. 단지, 클래스 안에 추상 메서드를 하나라도 선언하면 상속을 통해서 자손 클래스에서 완성하도록 유도하는 클래스입니다. 그래서 미완성 설계도라고도 표현합니다. 상속을 위한 클래스이기 때문에 따로 객체를 생성할 수 없습니다.

class 앞에 "abstract" 예약어를 사용하여 상속을 통해서 구현해야한다는 것을 알려주고 선언부만 작성하는 추상메서드를 선언할 수 있습니다.

abstract class 클래스이름 {
    ...
    public abstract void 메서드이름();
}

인터페이스

추상클래스가 미완성 설계도라면 인터페이스는 그냥 설계도자체 라고 할 수 있습니다. 인터페이스도 추상클래스처럼 다른 클래스를 작성하는데 도움을 주는 목적으로 작성하고 클래스와 다르게 다중상속(구현)이 가능합니다.

이 둘을 사용해 수 많은 클래스들의 구현에 방향성이 잡히기 때문에 구현 작업이 쉬워지는 장점이 있습니다.

추상클래스 VS 인터페이스

사용목적의 차이

추상클래스는 IS - A "~이다".

인터페이스는 HAS - A "~을 할 수 있는".

이렇게 구분하는 이유는 다중상속의 가능 여부에 따라 용도를 정한 것 같습니다. 자바의 특성상 한개의 클래스만 상속이 가능하여 해당 클래스의 구분을 추상클래스 상속을 통해 해결하고, 할 수 있는 기능들을 인터페이스로 구현합니다.

공통된 기능 사용여부

만약 모든 클래스가 인터페이스로 구성 되어 있다면,,,상속 받는 모든 클래스에서 똑같은 기능을 하는 메소드를 모두 오버라이딩해서 같은 기능을 구현해야 하는 번거로움이 있습니다.

🙋 어? 그럼 추상클래스만 쓰면 되는거아님????
🤖 자바는 하나의 클래스만 상속 가능하다고 닝겐 ^^;;;

정리하자면,

  • 추상클래스의 경우 : 상속 관계를 쭉 타고 올라갔을때 같은 조상클래스를 상속하는데 기능까지 완벽히 똑같은 기능이 필요한 경우.

  • 인터페이스의 경우 : 상속 관계를 쭉 타고 올라갔을때 다른 조상클래스를 상속하는데 같은 기능이 필요한 경우.

profile
호기심많은 개발자

0개의 댓글