Java

추상 클래스 vs 인터페이스

현인 2022. 4. 12. 20:31

추상 클래스 vs 인터페이스

  • 추상 클래스와 인터페이스의 차이점을 설명해주세요

이 글은 해당 질문의 대한 답을 하기 위해 작성되었습니다!

지금 이 글을 읽고 계신 여러분도 이에 대한 답을 알고싶다면

이 질문을 잘 기억하셨다가 글을 다 읽어보고 답을 내려보시면 좋겠습니다!

추상화란?

우선 추상 클래스를 알기 전 추상 클래스 앞에 붙어있는 추상에 대한 것부터 알아보죠

  • 추상화 : 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것

이처럼 추상화는 구체적인 사물들간의 공통점을 취하고 차이점을 버리는 일반화를 사용하거나, 중요한 부분을 강조하기 위해 불필요한 세부사항을 제거함으로써 간결하게 만듭니다.

 

요점은 불필요한 코드를 제거하고 중요한 부분을 살리는 것입니다.

 

예를들어 우리가 자동차를 운전한다고 생각해봅시다.

 

자동차를 운전할 때에는 시동을 켜고, 기어를 조정하고, 안전벨트를 매고, 엑셀을 밞는 등의 일련의 행위를 시행합니다. 그렇게 해서 우리는 자동차를 앞으로 나아가게 하겠죠.

 

하지만 만약 운전자가 자동차를 운전하기 위해서, 즉 자동차가 앞으로 나아가게 하기 위해

자동차의 설계와 동작 방식까지 알아야한다면 어떨까요?

 

운전자는 운전만 하면 되는데 굳이 자동차의 동작방식까지는 알 필요까진 없겠죠.

이러한 상황을 피하기 위해 우리는 추상화를 하는 것입니다.

 

해당 클래스가 어떤 동작을 할지 필요한 동작만 설계하고,

불필요한 정보들은 제거하고,정해진 설계도에 따라 구현하는 것이죠.

추상 클래스는 ?

추상화를 알았다면 이제 추상 클래스에 대해 알아봅시다!

 

클래스를 설계도에 비유하면, 추상 클래스는 미완성 설계도에 비유할 수 있습니다.

추상 클래스는 상속을 통해서 자식 클래스에서 완성하도록 유도하는 클래스입니다.

그래서 미완성 설계도라고도 표현합니다.

 

추상 클래스는 추상 메소드 뿐만 아니라 생성자, 필드, 일반 메소드도 포함하여 상속합니다.

 

자식 클래스가 여러 부모 클래스를 상속받을 수 있다면, 다양한 동작을 수행할 수 있다는 장점을 가지게 될 것입니다.

하지만 클래스를 이용하여 다중 상속을 할 경우 같은 이름의 메소드를 오버라이딩 할 경우 어떤 부모 클래스의 메소드를

선택할 지 등 여러가지 문제가 발생할 수 있어 자바에서는 클래스를 통한 다중 상속은 지원하지 않습니다.

인터페이스

인터페이스도 추상화 클래스와 비슷하게 추상화를 통해 객체가 어떤 동작을 설계하는 클래스입니다.

  • 인터페이스를 통해 기본적으로 구현해야할 메소드에 대한 정보를 알려줍니다.
  • 인터페이스는 여러 개의 인터페이스를 클래스가 구현할 수 있습니다.

총총

  • 추상 클래스는 클래스 단위로 추상화
    • 부모와 결속이 강한 상태에서 기능 확장을 이룹니다.
  • 인터페이스는 메소드 단위로 추상화
    • 메소드를 유연하게 작성하여 변경과 확장이 쉽습니다.