[Java] 추상클래스 vs 인터페이스, 언제 어떤 것을 사용할까?

2025. 1. 7. 15:16·공부하기/Java

추상 클래스

  • `class` 앞 `abstract` 키워드 사용
  • 추상 메서드를 포함한 클래스
    • 그러나 추상 메서드를 포함하지 않더라도 abstract 키워드를 통해 추상 클래스 처리가 가능하다. ( -> 인스턴스 생성 불가하도록 만들 수 있음)
  • 기존 클래스처럼 멤버변수와 메서드, 생성자를 가질 수 있음
  • 인스턴스를 생성할 수 없음
  • 추상 클래스를 상속받는 클래스는
    1. 모든 추상 메서드를 구현하여 인스턴스 생성이 가능한 `클래스`가 되거나,
    2. 모든 추상 메서드를 구현하지 않은 경우 `추상 클래스`가 된다.

인터페이스

  • 오직 `추상 메서드`와 `상수`만을 멤버로 가진다 ( *default/static 메서드 예외 )
    • 모든 메서드는 `public abstract`
    • 모든 멤버 변수는 `public static final`
  • 인스턴스를 생성할 수 없음
  • 인터페이스 구현 시 `implements` 키워드 사용
    • 인터페이스끼리 다중 상속이 가능하다.
    • 클래스는 여러 인터페이스를 구현할 수 있다. (다중 구현 가능)
  • 인터페이스를 구현한 클래스가
    • 모든 추상 메서드를 구현하지 않은 경우 `추상 클래스`가 된다.
  • default 메서드
    • `default` 키워드를 통해 구현체를 가진 일반 메서드를 선언할 수 있다.
    • 인터페이스를 구현한 모든 클래스를 수정할 필요없이 구현된 메서드를 새로 추가할 수 있다.
      • 필요한 클래스만 오버라이딩 - 재정의해서 사용하면 된다.

추상 클래스와 인터페이스의 사용 목적

추상 클래스와 인터페이스 모두 추상 메서드를 통해 특정 작업의 구현을 강제하는 점에서는 공통적이다.

그렇지만 ! 둘의 사용의 목적이 다르다.

추상 클래스

'클래스의 확장'에 목적이 있다.

사실 일반 클래스를 상속하는 목적과 동일하다.

그렇지만 여기에  '반드시 재정의 하도록 강제하여야 하는 메서드'가 있을 때 추상 클래스를 사용하는 것이다.

 

* 공통(중복) 데이터를 정의하고, 하위 클래스가 반드시 구현하도록 강제하여야 하는 메서드가 있을 때, 추상 클래스를 사용한다.

 

추상 클래스와 이를 상속 받는 자식 클래스간에는 논리적으로 is - a 관계가 성립한다.

인터페이스

작업 목록을 인터페이스 안에 묶어 정의하고 인터페이스를 구현하여 해당 작업을 수행하도록 한다.

논리적으로 연관된 객체는 아니지만 공통된 작업을 수행하는 경우, 작업을 인터페이스로 묶어 정의하고 같은 인터페이스를 구현하도록 한다.

 

인터페이스와 이를 구현하는 인터페이스/클래스 간에는 논리적으로 can - do 관계가 성립한다.

 

→ 인터페이스의 구현을 통해 '특정 작업'이 수행 가능함을 보장한다. (따라서 인터페이스의 이름은 관용적으로 -able인 경우가 많다.)

 

 

 

 

저작자표시 비영리 변경금지 (새창열림)

'공부하기 > Java' 카테고리의 다른 글

🧐 계산기 과제를 마무리하는데 생겨난 궁금증 : Generics 사용  (0) 2025.01.09
계산기 과제 : 계산 결과 Lambda&Stream 필터링 조회 구현하기  (2) 2025.01.07
계산기 과제 : Java Generics, Enum 활용기  (0) 2025.01.06
Java Enum 이놈아  (1) 2025.01.03
Java의 예외처리를 조금 자세히 알아보자  (1) 2025.01.02
'공부하기/Java' 카테고리의 다른 글
  • 🧐 계산기 과제를 마무리하는데 생겨난 궁금증 : Generics 사용
  • 계산기 과제 : 계산 결과 Lambda&Stream 필터링 조회 구현하기
  • 계산기 과제 : Java Generics, Enum 활용기
  • Java Enum 이놈아
다섯자두
다섯자두
All I need is 💻 , ☕️ and a dash of luck
  • 다섯자두
    subbni
    다섯자두
  • 전체
    오늘
    어제
    • 전체 글 (88) N
      • 개발 이야기 (0)
      • 만들어보기 (17)
        • FromBookToBook (5)
        • Spring (5)
        • Node.js & React (3)
        • TroubleShooting (4)
      • 공부하기 (71) N
        • Network (3)
        • Cloud (1)
        • Database (5)
        • Java (13)
        • Javascript (0)
        • Spring (9)
        • React (18)
        • Algorithm (8)
        • 자료구조 (7)
        • ETC (7) N
      • 회고 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • velog
  • 공지사항

  • 인기 글

  • 태그

    로그인
    오블완
    Database
    티스토리챌린지
    알림 기능
    outbox 패턴
    SQS
    outbox
    mysql
    network
    알고리즘
    재시도 로직
    SSE
    pdf 자동 다운로드
    redis
    서명알고리즘
    최단거리
    JPA
    SQL
    프로젝트
    Til
    pdf 프리뷰 실패
    실시간 데이터 전송 기술
    springboot
    Spring
    java
    HTTP
    Express
    aws
    자료구조
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
다섯자두
[Java] 추상클래스 vs 인터페이스, 언제 어떤 것을 사용할까?
상단으로

티스토리툴바