개발 언어/자바(Java)

[개념정리] 추상 클래스 & 인터페이스 차이점 및 특징

라이언 IT 2024. 6. 15. 16:38

* 공부와 업무 정리를 위해 포스팅 합니다.

* 정확하지 않는 내용이 있을 수 있으니 참고해주시면 감사하겠습니다.


<추상 클래스 / 인터페이스 차이점>

Abstract Class Interface
인스턴스화 될 수 없는 클래스 (객체 생성할 수 없음) 인스턴스화 될 수 없는 클래스 (객체 생성할 수 없음)
abstract, non-abstract 메소드 선언 모두 abstract 메소드 선언
일부 메소드 구현 가능 및 일부는 추상적(abstract)으로 남김 모든 메소드는 추상적(abstract) 으로 남김
추상 메소드는 상속하는 하위 클래스에서 재정의(Overriding) 필요 상속하는 하위 클래스에서 모두 재정의(Overriding) 필요

 


 

<추상 클래스 특징>

 

추상 클래스는 직접 인스턴스화 될 수 없는 객체 지향 프로그래밍(OOP)의 특정 유형의 클래스이며,

파생된 다른 클래스를 위한 '청사진'이나 '템플릿'의 역할을 함

 

1) 인스턴스화 할 수 없음

  - 직접 인스턴스화 할 수 없고 객체를 생성할 수 없음

 

2) 하나 이상의 순수 가상 함수 포함

  - 하나 이상의 순수 가상 함수를 포함해야 하고, 함수에 구현이 없으면 다른 파생된 클래스에서 구현되어야 함

 

3) 추상 메소드와 비추상(non-abstarct) 메소드 모두 포함할 수 있음

  - 추상/비추상 클래스 메소드 모두 가질 수 있음

  - 비추상 클래스 메소드는 완벽한 구현을 가지고 직접 호출할 수 있음

 

4) 생성자와 소멸자 가질 수 있음

  - 다른 클래스처럼 생성자와 소멸자(Finalize())를 가질 수 있음

 

5) 멤버 변수 가질 수 있음

  - 클래스 객체에 속하는 멤버 변수를 가질 수 있음

 

6) 기본 클래스로 사용 가능

  - 기본 클래스로 사용할 수 있고, 이는 다른 클래스에 상속될 수 있는 클래스를 의미

 

전반적으로, 추상 클래스는 여러 관련 클래스에 의해 공유할 수 있지만 파생 클래스의 특정 구현을 사용하여 공유할 수 있는 공통 인터페이스 또는 동작을 정의하는 데 사용된다.


 

<인터페이스 특징>

 

1) 메소드와 속성 집합 정의

  - 인터페이스를 구현하는 다른 클래스나 구조에 의해 구현되어야 하는 메소드 및 속성 정의

 

2) 공통 프로토콜 제공

  - 서로 통신하기 위해 다른 소프트웨어 요소를 허용하는 공통 프로토콜 제공

 

3) 다형성 지원

  - 인터페이스는 다형성을 달성하기 위해 사용될 수 있음

  - 다만, 다른 클래스의 객체들이 동일한 인터페이스를 구현하는 한 동일한 유형에 속하는 것처럼 처리될 수 있음

 

4) 관심사 분리 가능

  - 관심사 분리가 가능하게 함

  -  , 인터페이스 명세서를 준수하는 한 소프트웨어 시스템의 여러 부분을 서로 독립적으로 개발될 수 있음

 

5) 코드 재사용성 향상

  - 인터페이스는 동일한 인터페이스를 구현하는 한, 다른 소프트웨어 요소를 동일한 코드 베이스를 재사용하여 코드 재사용성 향상

 

6) 디자인 패턴 적용

  - 디자인 패턴을 적용을 사용되게 할 수 있음

  -  예를 들어, '어댑터 패턴'은 구현 클래스에서 특정 메소드나 속성을 구현하도록 요구

 

7) 테스트 가능

  - 인터페이스를 구현하는 모의(Mock) 객체를 사용하여 서로 독립적으로 소프트웨어 요소를 테스트하게 되는 것을 허용함으로써 인터페이스는 테스트를 용이하게 함.


 

Reference

- Java의 추상 클래스와 인터페이스의 차이점