인터페이스(interface)와 추상 클래스(abstract class)는 모두 객체 지향 프로그래밍에서 다형성을 구현하는 데 사용되는 중요한 개념입니다. 이 둘은 비슷한 목적을 가지고 있지만 몇 가지 중요한 차이점이 있습니다.
인터페이스(Interface)
- 정의 : 인터페이스는 메서드 선언만 포함하는 추상적인 개념으로, 구현되지 않은 메서드의 시그니처만을 가지고 있습니다.
- 선언 : `interface` 키워드를 사용하여 선언됩니다.
- 상속 : 인터페이스는 다른 인터페이스로부터만 상속할 수 있습니다.
- 다중 상속 : 여러 개의 인터페이스를 구현할 수 있습니다.
- 필드 : 상수 필드만을 가질 수 있으며, 이들은 자동으로 `public static final`로 선언됩니다.
- 구현 : 클래스가 인터페이스를 구현할 때는 `implements` 키워드를 사용합니다.
추상 클래스(Abstract Class)
- 정의 : 추상 클래스는 하나 이상의 추상 메서드를 포함하며, 일반 메서드와 필드도 포함할 수 있습니다.
- 선언 : `abstract` 키워드를 사용하여 선언됩니다.
- 상속 : 추상 클래스는 다른 클래스로부터 상속할 수 있으며, 인터페이스로부터도 상속받을 수 있습니다.
- 단일 상속 : 단 하나의 추상 클래스만을 상속할 수 있습니다.
- 필드 : 일반 필드와 추상 메서드 외에도 일반 메서드를 가질 수 있습니다.
- 구현 : 클래스가 추상 클래스를 상속할 때는 `extends` 키워드를 사용합니다.
인터페이스와 추상 클래스의 차이점
- 구현 내용 : 인터페이스는 메서드의 시그니처만을 정의하고 구현 내용은 없습니다. 반면에 추상 클래스는 일반적인 메서드와 필드를 가질 수 있으며, 추상 메서드 또는 일반 메서드로 선언될 수 있습니다.
- 다중 상속 vs 단일 상속 : 인터페이스는 여러 개의 인터페이스를 동시에 구현할 수 있지만, 추상 클래스는 하나의 추상 클래스만을 상속할 수 있습니다.
인터페이스 예시
interface Animal {
void makeSound();
}
class Dog implements Animal {
public void makeSound() {
System.out.println("멍멍!");
}
}
class Cat implements Animal {
public void makeSound() {
System.out.println("야옹!");
}
}
추상 클래스 예시
abstract class Shape {
protected String color;
public Shape(String color) {
this.color = color;
}
abstract double area();
public void display() {
System.out.println("도형의 색상: " + color);
}
}
class Rectangle extends Shape {
private double width;
private double height;
public Rectangle(String color, double width, double height) {
super(color);
this.width = width;
this.height = height;
}
public double area() {
return width * height;
}
}
위의 예시에서는 인터페이스와 추상 클래스를 사용하여 각각 동물의 소리와 도형의 넓이를 구하는 예시를 보여주었습니다. 이러한 설계 패턴은 객체 지향 프로그래밍에서 중요한 역할을 합니다.
'JAVA > 기초' 카테고리의 다른 글
[Java] 다중 인터페이스(다중 상속) (0) | 2024.02.27 |
---|---|
[Java] 인터페이스(interface)와 디폴트(default) 메서드 (1) | 2024.02.27 |
[Java] Class 란? (0) | 2024.02.27 |
[JAVA] 가변인수(VarArgs) (0) | 2024.02.20 |
[JAVA] BigDecimal 클래스 (0) | 2024.02.20 |