인터페이스와 추상클래스의 차이
2024. 2. 4. 16:01ㆍ백엔드/JAVA
자바에서 다형성을 구성하는 데 사용되는 것이 바로 인터페이스와 추상클래스인데요 비슷한 것 같은 인터페이스와 추상클래스!
어떤 점이 다르기에 구분해서 사용하는지에 대하여 알아보겠습니다. ✏️
# 추상클래스
- abstract 키워드를 이용하여 선언된 클래스나 내부에 추상 메서드를 한 개 이상 포함한 클래스 (일반메서드도 포함을 할 수 있음)
- 실체클래스들의 공통적인 특성을 추출해서 선언한 클래스
- 추상클래스의 추상메소드는 실체클래스에서 무조건 상속을 받아 재정의 해야 한다.(오버라이딩 필수)
- 직접 인스턴스를 생성 할 수 없음
- 단일 상속만 허용
- 클래스간의 연관 관계를 구축하는 것에 초점
- 인스턴스화할 수 없음
예시 코드
abstract class Shape {
abstract void draw();
void display() {
System.out.println("Displaying the shape");
}
}
class Circle extends Shape {
@Override
void draw() {
System.out.println("Drawing a circle");
}
}
class Rectangle extends Shape {
@Override
void draw() {
System.out.println("Drawing a rectangle");
}
}
public class Main {
public static void main(String[] args) {
Shape circle = new Circle();
circle.draw();
circle.display();
Shape rectangle = new Rectangle();
rectangle.draw();
rectangle.display();
}
}
# 인터페이스
- interface 키워드를 이용하여 선언
- 추상 메서드와 상수만을 가질 수 있음
- 하위에 선언된 모든 메서드는 자동으로 추상 메서드로 선언
모든 필드는 public static final이어야 하며, 모든 메서드는 public abstract 이어야 함 - 다중 상속 허용
- 클래스와 별도로 구현 객체가 같은 동작을 한다는 것을 보장하기 위해 사용하는 것에 초점
- 인스턴스화할 수 없음
예시 코드
interface Animal {
// 추상 메서드
void sound();
}
class Dog implements Animal {
// 인터페이스의 추상 메서드 구현
public void sound() {
System.out.println("멍멍");
}
}
class Cat implements Animal {
// 인터페이스의 추상 메서드 구현
public void sound() {
System.out.println("야옹");
}
}
표로 정리해보자
추상클래스 | 인터페이스 | |
목적 | 기능을 확장 시키기 위함 | 구현 객체의 함수 구현 강제 |
선언 키워드 | abstract | interface |
상속 키워드 | extends | implements |
다중 상속 | 불가 | 가능 |
메서드 구현 | 추상메서드, 일반 메소드 구현가능 | 추상메소드만 구현 가능 |
선언 가능 변수 | 상수 | 인스턴스 변수, 상수, 일반 변수 |
'백엔드 > JAVA' 카테고리의 다른 글
오버로딩(Overloading)과 오버라이딩(Overriding) (0) | 2024.02.03 |
---|---|
JVM 그리고 코드를 실행하는 과정에 대하여 (0) | 2024.02.03 |
멀티모듈 적용하기 (2) | 2024.01.18 |
repeat() : 문자열 반복 (0) | 2023.12.02 |
오버라이딩을 구현할 때 @Override 어노테이션을 사용하는 이유 (1) | 2023.10.24 |