👩💻 What is 추상 클래스?
여러 클래스의 공통된 특성(필드, 메소드)를 추출해서 선언한 것을 추상 클래스라고 합니다.
실체 클래스(객체 생성용)들의 공통적인 특성(필드, 메소드)를 추출하여 선언한 것입니다.
추상 클래스와 실체 클래스는 부모, 자식 클래스로서 상속 관계를 가집니다.

그림으로 나타내면 이렇습니다.
🔦추상 클래스의 용도
실체 클래스에 반드시 존재해야 할 필드와 메소드를 선언합니다.
자식 클래스들이 공통적으로 가져야하는 규격들을 추상클래스로 정의해놓고
자식 클래스들이 추상 클래스 규격대로 실체 클래스를 작성하기 위함입니다.
추상 클래스를 썼을 때 장점이 무엇인가 알아본다면
실체 클래스에는 공통된 내용은 빠르게 물려받고,
다른 점만 선언하면 되므로 시간절약할 수 있습니다.
추상 클래스 선언
public abstract class 클래스{
// 필드
// 생성자
// 메소드
}
추상 클래스도 일반 클래스와 마찬가지로 필드, 생성자, 메소드를 선언할 수 있습니다.
직접 객체를 생성할 순 없지만, 자식 객체가 생성될 때 객체화 됩니다.
자식 생성자에서 super(..) 형태로 추상 클래스의 생성자를 호출합니다.

위와 같이 주로, 메소드 선언만 통일하고 실행 내용은 실체 클래스마다 달라야 하는 경우에 사용합니다.
추상 메소드는 abstract 키워드로 선언되고 중괄호가 없습니다.
하위 클래스에는 반드시 추상 메소드를 재정의해서 실행 내용을 채워야합니다.
정리
- 추상 클래스 : 클래스들의 공통적인 필드와 메소드를 추출하여 선언한 클래스입니다.
- 추상 메소드 : 추상 클래스에서만 선언할 수 있고, 자식 클래스에서 실행 내용을 재정의 해야합니다.
인터페이스( Interface )
인터페이스는 다양한 객체를 동일한 사용 방법으로 이용할 수 있고, 다형성을 구현할 수 있습니다.
즉, 객체의 사용방법을 가이드라인 하는 것이라고 할 수 있습니다.

인터페이스는 개발코드와 인터페이스로 생성된 객체들을 중간에서 중계해주는 역할을 합니다.
개발 코드가 먼저 인터페이스의 메서드를 호출하면, 인터페이스는 객체의 메서드를 호출시키는 형식입니다.
인터페이스로 구현된 객체는 인터페이스에서 정의된 추상 메서드와 동일한 메소드이름, 매개타입, 리턴 타입을 가진 실체 메소드를 필수로 가지고 있어야합니다.
이러한 과정을 통해 클래스 간의 결합도를 낮춘 효율적인 프로그래밍이 가능해지도록 합니다.
인터페이스 선언
~.java 형태 소스 파일로 작성 및 컴파일러를 통해 ~.class 형태로 컴파일됩니다.
클래스와 물리적 파일 형태는 같으나 소스 작성 내용이 다릅니다.
[public] interface 인터페이스이름 {..}
인터페이스는 객체로 생성할 수 없으므로 생성자를 가질 수 없습니다. <ㅡㅡ> 추상 클래스는 생성자를 가질 수 있다!
interface 인터페이스이름 {
// 상수
타입 상수이름 = 값;
// 추상 메소드
타입 메소드이름(매개변수,..);
}
상수 필드 선언
데이터를 저장할 인스턴스 혹은 정적 필드 선언이 불가능하며,
상수 필드만 선언 가능하다는 특징이 있습니다.
구현 클래스
구현 클래스는 인터페이스에서 정의된 추상 메소드를 재정의해서 실행 내용을 가지고 있는 클래스를 말합니다.;
public class 구현클래스이름 implements 인터페이스이름 {
// 인터페이스에 선언된 추상 메소드의 실체 메소드 선언
}
다음과 같이 명시하면 됩니다!
다중 인터페이스
인터페이스는 저번 시간에 알아보았던 클래스와 다르게 다중상속이 가능합니다.
그런데 인터페이스는 다중 상속이 가능한 이유가 무엇인지 알아보겠습니다.
먼저, 클래스가 다중상속이 안되는 이유에 대해서 알아보겠습니다.

Female, Male 클래스가 Human이라는 같은 클래스를 상속받고,
Person이라는 클래스가 Female, Male 클래스를 상속받는다고 하겠습니다.
이럴때 문제가 발생합니다.
Person은 getClothes()라는 메소드를 쓸 때 Female에 있는 getClothes()를 써야하는지 Male에 있는 getClothes()를 써야하는지에 대해서 혼동이 옵니다.
또한 슈퍼클래스의 메소드를 오버라이딩할 때 어떤 슈퍼클래스의 메소드를 오버라이딩 하려고 하는지 알 수 없다는 문제점도 있습니다.
이런 이유로 클래스는 다중 상속을 할 수 없습니다.
그렇다면 인터페이스는 어떻게 이 문제를 해결하였을까요❓
인터페이스는 일반 클래스처럼 메소드가 어떤 행동을 하는지에 대해서 기술하지 않습니다.
"추상화된 메소드"이기 때문입니다.
이 말은 Female과 Male 따질필요가 없다는 말과 동일합니다.
즉, 인터페이스는 추상화된 메소드이기 때문에 다중상속이 가능합니다.
'🧮Programming > Java' 카테고리의 다른 글
| [Java] 컬렉션 프레임워크 (1) | 2024.02.07 |
|---|---|
| [Java] 예외 처리 (0) | 2024.02.06 |
| [Java] 상속, 다형성 (0) | 2024.02.06 |
| [Java] 패키지와 접근 제한자 (0) | 2024.02.06 |
| [Java] 객체와 클래스 (0) | 2024.02.06 |