`abstract`와 `interface`는 추상화를 구현하는 두가지 주요 도구이다
1. 추상 클래스 (`abstract`)
개념
- 추상 클래스는 완전히 구현되지 않은 클래스 이다
- 일부 메서드는 구현을 가지고, 일부는 구현되지 않을 수 있다
- 직접 객체 생성이 불가능하며 상속받을 하위 클래스가 구현해야 합니다
특징
- 클래스와 메서드에 `abstract` 키워드 사용
- 구현된 메서드 포함 가능함 (일반 메서드와 추상 메서드 모두 가질수 있다)
- 상속을 통한 확장 (다른 클래스가 이를 상속받아야 하며 추상메서드를 반드시 구현해야함)
- 인스턴스 생성 불가 (직접 객체를 생성할 수 없음)
- 변수와 메서드의 다양한 유형 허용 (인스턴스 변수, 정적 변수, 정적 메서드 등을 포함할 수 있다)
- 클래스 내부의 변수나 메서드중에 하나라도 abstract가 붙으면 클래스에 무조건 abstract를 붙여야함
- 추상 클래스를 상속받아 추상 메서드를 구현할때에는 @Override (오버라이드) 로 표시
2. 인터페이스 (`interface`)
개념
- 인터페이스는 모든 메서드가 구현되지 않은 틀 이다
- 클래스가 인터페이스를 구현 해야한다
- 다중 상속을 지원한다
특정
- 모든 메서드는 기본적으로 추상적이나 자바8 이후부터 default 메서드와 정적 메서드 추가 가능
- 여러 인터페이스를 동시에 구현 가능
- 변수는 상수만 혀용 (`public static final`)
- 인스턴스 생성 불가
- 자격증 이라고 비유해서 생각하면 쉬움
defaul메드
interface Animal {
void makeSound();
// default 메서드
default void sleep() {
System.out.println("This animal is sleeping.");
}
}
class Dog implements Animal {
@Override
public void makeSound() {
System.out.println("Woof! Woof!");
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog();
dog.makeSound(); // 구현된 메서드 호출
dog.sleep(); // default 메서드 호출
}
}
정적메서드
interface Animal {
static void info() {
System.out.println("Animals are living beings.");
}
}
public class Main {
public static void main(String[] args) {
Animal.info(); // 정적 메서드 호출
}
}
`abstract`와 `interface`의 차이
특징 | abstract | interface |
상속/구현 | extends 키워드 사용 (단일 상속만 가능) | implements 키워드 사용 (다중 구현 가능) |
메서드 | 일반 메서드 + 추상 메서드 | 모든 메서드가 기본적으로 추상적 |
변수 | 인스턴스 변수와 상수 가능 | `public static final` 변수만 허용 |
다중 상속 | 불가능 | 가능 |
사용 목적 | "is-a"관계 (일반적인 클래스 확장) | "can-do"관계 (행동을 정의) |
객체 생성 | 불가능 | 불가능 |
출처 : ChatGPT
'BE > Java' 카테고리의 다른 글
[Java] 생성자와 오버로딩, getter setter (0) | 2024.12.01 |
---|---|
[Java] 캐스팅 (형 변환) (0) | 2024.12.01 |
[Java] 접근 제어자 (0) | 2024.11.30 |
[Java] static (0) | 2024.11.30 |
[Java] 메모리 계산 (1) | 2024.11.30 |