250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 티스토리챌린지
- 인터페이스
- Access Modifier
- Functional Interfaces
- 자율학습
- cluster index
- 오블완
- 0 시작
- Lazy loading
- 혼공컴운
- literal
- 인프런
- 접근제어자
- 혼공학습단
- 혼공자바
- 나도코딩
- 스프링 부트 3
- types
- 접근 제어자
- entrySet
- noncluster index
- Proxy Object
- 네트워크
- HashMap
- 혼공
- java
- Wildcard
- Spring Data JPA
- Interface
- dotnet
Archives
- Today
- Total
지금을 사는 사람
[Java] 추상클래스와 인터페이스의 차이 본문
728x90
1. Abstract Class(추상 클래스)와 Interface(인터페이스)의 공통점:
두 가지 모두 Java에서 다형성을 구현하는데 사용되는 객체 지향의 중요한 개념들입니다. 그러나 추상 클래스와 인터페이스는 몇 가지 차이점을 가지고 있습니다.
2. Abstract Class의 특징:
- 일반적인 메서드와 추상 메서드:
- 추상 클래스는 일반적인 메서드와 추상 메서드를 모두 가질 수 있습니다. 추상 메서드는 하위 클래스에서 반드시 구현되어야 합니다.
public abstract class Animal {
public void eat() {
// 구현 내용
}
public abstract void makeSound(); // 추상 메서드
}
- 다중 상속 불가:
- 추상 클래스는 단일 상속만을 지원하며, 클래스는 여러 추상 클래스를 상속받을 수 없습니다.
- 생성자 존재:
- 추상 클래스는 생성자를 가질 수 있습니다. 이를 통해 공통적인 초기화 로직을 처리할 수 있습니다.
3. Interface의 특징:
- 모든 메서드가 추상 메서드:
- 인터페이스는 모든 메서드가 추상 메서드입니다. Java 8부터는 default 및 static 메서드를 인터페이스에 추가할 수 있게 되었습니다.
public interface Animal {
void eat(); // 추상 메서드
default void run() {
// 구현 내용
}
}
- 다중 상속 가능:
- 인터페이스는 다중 상속을 지원하며, 여러 인터페이스를 동시에 구현할 수 있습니다.
- 생성자 미존재:
- Java 8 이전에는 생성자가 없었지만, Java 8부터는 인터페이스에
default
메서드를 사용하여 메서드의 기본 구현을 제공할 수 있게 되었습니다.
- Java 8 이전에는 생성자가 없었지만, Java 8부터는 인터페이스에
4. 언제 Abstract Class를 사용하고 언제 Interface를 사용할까?
- 공통 코드가 필요한 경우:
- 공통 코드를 가지는 메서드나 필드가 있는 경우 추상 클래스를 활용할 수 있습니다.
- 다중 상속이 필요한 경우:
- 다중 상속이 필요하거나 이미 다른 클래스를 상속받고 있는 경우, 인터페이스를 사용하는 것이 좋습니다.
- API의 일관성을 유지하고 싶은 경우:
- 여러 클래스가 같은 인터페이스를 구현할 때, API 일관성을 유지하기 위해 인터페이스를 사용하는 것이 좋습니다.
- Abstract Class 는 확장을 목적으로 Interface 는 공통된 기능을 강제하는 목적으로 사용한다.
- Abstract Class : 자동차 Class를 상속받는 SUV, SportsCar
- Interface : withdraw와 deposit 기능을 필수로 구현해야하는 은행 Interface
5. 결론:
추상 클래스와 인터페이스는 다형성을 구현하기 위한 두 가지 주요 도구로, 각각의 특징을 고려하여 프로젝트의 목적과 구조에 따라 적절한 선택을 해야 합니다. 언제 어떤 것을 사용할지를 이해하면 유지보수 가능하고 확장 가능한 코드를 작성하는 데 도움이 될 것입니다.
728x90
'Java' 카테고리의 다른 글
[Java] iterator의 동작 방식 (0) | 2024.01.03 |
---|---|
[Java] Hashmap에서 entryset을 사용하는 이유 (1) | 2024.01.03 |
[Java] 인터페이스 (Interface) (2) | 2023.12.26 |
[Java] 상수(Constant) (0) | 2023.12.26 |
[Java] 접근제어자 Protected와 Default의 차이 (0) | 2023.12.22 |