추상클래스와 인터페이스에 대하여

2020. 1. 18. 00:05·JAVA

추상클래스 && 인터페이스

추상클래스는 abstract 라는 키워드와 함께 선언된 클래스예요. (추상 메소드를 포함할 수도 있고 하지 않을 수도 있고). 추상클래스는 인스턴스화 될 수 없지만 상속될 수 있어요.

추상클래스를 상속받는 클래스에서는 일반적으로 부모클래스에 있는 모든 추상메소드들을 구현해야 해요. 그렇지 않은 경우엔 해당 서브클래스 또한 abstract 로 선언되어야 합니다.

추상클래스와 인터페이스 차이

  • 추상클래스와 인터페이는 인스턴스로 만들지 못해요. 메소드 구현부가 있는 메소드와 없는 메소드 모두 가질 수 있어요.

  • 인터페이스의 모든 변수엔 public static final , 메소드에는 public abstract가 붙어있어요.(생략가능)

  • 추상클래스엔 static, final 이 아닌 변수를 가질 수 있고 public 외에 protected, private 접근지정자를 가질 수 있어요.

  • 인터페이스를 구현하는 클래스는 여러개의 인터페이스를 구현할 수 있어요. 추상클래스는 상속을 통해 구현을 하는데 자바에서는 다중상속이 불가능해요. 따라서 추상클래스를 상속받은 클래스는 다른 클래스를 상속받을 수 없어요.

  • 자바 8 부터의 인터페이스에선 디폴트 메서드를 가질 수 있어요. 이 디폴트 메서드는 같은 패키지 내에서만 접근이 가능해요.

  • 추상클래스에서는 다양한 접근 제어자를 사용할 수 있어요. 만약 추상클래스를 인터페이스로 바꿔버리면 이 추상클래스가 서드파티 라이브러리로 제공 되는 경우 디폴트로 정의된 메소드의 구현부에 있는 내용을 사용할 방법이 없어요!

  • 인터페이스가 디폴트 메서드를 (메서드 구현부)를 가질 수 있다고 해서 인터페이스가 추상클래스를 대체할 수 있는건 아니니 명심!

추상클래스와 인터페이스 사용 예

추상클래스

  • 관련성이 높은 클래스 간에 코드를 공유하고 싶은 경우
  • 상속받은 클래스들이 공통으로 가지는 메소드와 필드가 많거나 public 외의 접근지정자를 사용하고 싶을 때
  • static,final 이 아닌 변수들을 선언이 필요한 경우! 즉 각 인스턴스에서 state 변경을 위한 메소드를 선언할 수 있어요

인터페이스

  • 서로 관련성이 없는 클래스들이 인터페이스를 구현하게 되는 경우에 사용. 예를 들어 Comparable 인터페이스는 여러 클래스들에서 구현되는데 구현클래스들 간에 관련성이 없는 경우가 많다
  • 다중상속을 허용하고 싶은 경우
  • 특정 데이터 타입의 행동을 명시하고 싶은데, 그 행동이 어디서 구현되는지 알 필요 없는 경우
반응형
'JAVA' 카테고리의 다른 글
  • 서블릿 동작 과정
  • 미니 WAS 만들기.
  • 자바 스레드.
  • 자바 제네릭 타입에 대해 알아보자.
Jadie Blog
Jadie Blog
  • Jadie Blog
    Jadie
    Jadie Blog
  • 전체
    오늘
    어제
    • 분류 전체보기 (44)
      • OOP (7)
      • DDD (1)
      • JAVA (8)
      • Spring (12)
      • Kafka (1)
      • TDD,Test (4)
      • Basic (1)
      • ETC (1)
      • MySQL (0)
      • Javascript (0)
      • Spark (3)
      • Infra (2)
      • Algorithm (0)
      • Network (1)
      • Jobs (0)
      • 일상 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

    • 휴튼
  • 공지사항

  • 인기 글

  • 태그

    Transactional Outbox
    메시징시스템
    jpa
    entitymanager
    MSA
    localdatetime
    Kafka
    Spring
    API문서
    Spring #ApplicationContext
    우아한스터디
    캡슐화
    HTTP #HTTPS
    객체지향
    테스트
    routingdatasource
    Test
    JAVA #IO
    객체지향사실과오해
    추상클래스 #인터페이스
    java
    의존역전원칙
    slave
    OAuth2 #Spring
    OOP
    JPQL
    글또
    springboot
    MASTER
    Resilience4jFeign
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
Jadie Blog
추상클래스와 인터페이스에 대하여
상단으로

티스토리툴바