* 공부와 업무 정리를 위해 포스팅 합니다.
* 정확하지 않는 내용이 있을 수 있으니 참고해주시면 감사하겠습니다.
<추상 클래스 / 인터페이스 차이점>
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)' 카테고리의 다른 글
[개념정리] 자바(JAVA) 상속(implements / extends) (2) | 2024.06.02 |
---|---|
자바 메모리 영역(Static, Stack, Heap) (0) | 2023.02.19 |
Java의 정석 기본 상식 (0) | 2021.09.17 |