성장일기

내가 보려고 정리하는 공부기록

언어/자바

[JAVA] 추상 클래스와 추상 메소드, 인터페이스와의 차이까지

와나나나 2024. 6. 14. 00:56
728x90

자바 공부를 하다보면 한번쯤은 보게 되는 추상클래스와 인터페이스에 대해 정리하려고 한다. 원래는 하지 않을 생각이었는데, 자꾸 추상클래스와 인터페이스의 차이가 헷갈려서 !!!! 화가 나서 정리한다....... 😊 

 

일단 각각의 개념들 먼저 정리해보자.

 

✅ 추상클래스

우리는 실체 클래스를 이용해 객체를 생성한다. 이러한 클래스들의 공통적인 속성을 뽑아내어 선언한 클래스를 추상클래스라고 한다. 

 

상속할 때 extends를 사용하고, 선언 시 abstract class 라고 쓴다.

요런 느낌으로다가

 

1. 특징

추상클래스는 다음과 같은 특징을 갖는다.

  • 객체를 생성할 수 없다
    • 실체 클래스에서 추상클래스를 상속받아 객체를 생성한다
    • 모든 특성을 물려받게 된다. (필드. 메소드 등)
  • 추상 메소드를 단 한개라도 갖게 되면 추상 클래스가 된다
    • 상속받는 클래스는 추상 메소드를 꼭 구현해야 한다
    • 추상메소드 외에도 일반적인 필드, 메소드, 생성자 가질 수 있다
  • 다중상속이 불가능하다

 

2. 용도

이건 왜 필요할까 ? 

  • 공통된 필드와 메소드를 통합하여 이름 통일
  • 실체클래스를 작성할 때 시간 절약
    • 기능 확장도 가능

 

✅ 추상메소드

추상 클래스를 상속하는 자식 클래스마다 실행 내용이 달라야 하는 경우 추상 메소드를 선언한다.

추상클래스에서 선언만 하고 직접 구현은 되어있지 않아 중괄호가 없는 메소드이며, 이를 상속하는 자식 클래스는 반드시 추상 메소드를 오버라이딩 해야한다.

 

즉, 이는 꼭! 구현해주어야 한다.

 

 

 

✅ 인터페이스

인터페이스는 구현 전 지침서 같은 느낌이다. 구현해야 할 메소드를 모두 선언해두고, 이를 상속하여 모두 구현하면 된다. implements를 붙여 상속한다.

 

1. 특징

  • 모든 메소드추상 메소드이다
  • 객체를 생성할 수 없다
  • 클래스에 다중 구현을 지원하고 인터페이스 끼리도 다중상속이 가능하다 (implements 이용)
  • 필드 등 멤버 변수가 없다
    • static final인 상수만 가능하다
    • 생성자 못갖는다 

 

2. 용도

  • 모든 메소드의 구현을 강제함으로써 모든 구현 객체의 같은 동작을 보장한다

강의 들을 때, 클래스 작성 전에 인터페이스를 작성해주면 좋다고 했던게 갑자기 생각난다

 

 

 

 

결론적으로 추상클래스와 인터페이스의 차이는 용도에 있으며, 이를 고려하여 어떤 것을 사용할지 골라야 할 거 같다!