개발 문서/Java
인터페이스와 추상 클래스의 활용
copg
2023. 11. 11. 02:50
728x90
반응형
인터페이스(Interface)와 추상 클래스(Abstract Class)는 자바에서 다형성을 증진시키고, 코드의 재사용성을 높이는 데 기여하는 중요한 개념입니다. 각각의 특징과 활용 방법을 알아보겠습니다.
인터페이스 (Interface):
인터페이스는 메소드의 선언만을 갖고 있고, 해당 메소드의 실제 구현은 없는 추상화된 형태의 클래스입니다. 다른 클래스에서 이 인터페이스를 구현하면, 해당 클래스는 인터페이스에서 정의된 메소드들을 모두 구현해야 합니다.
// 인터페이스 정의
interface Shape {
double calculateArea(); // 메소드 선언만, 구현은 없음
}
// 인터페이스를 구현한 클래스
class Circle implements Shape {
private double radius;
public Circle(double radius) {
this.radius = radius;
}
@Override
public double calculateArea() {
return Math.PI * radius * radius;
}
}
// 다른 인터페이스 구현 클래스
class Rectangle implements Shape {
private double width;
private double height;
public Rectangle(double width, double height) {
this.width = width;
this.height = height;
}
@Override
public double calculateArea() {
return width * height;
}
}
인터페이스의 활용은 다중 상속을 지원하며, 클래스가 여러 인터페이스를 동시에 구현할 수 있도록 합니다. 또한, 서로 다른 클래스들이 동일한 인터페이스를 구현함으로써, 같은 형태로 다룰 수 있는 다형성을 구현할 수 있습니다.
추상 클래스 (Abstract Class):
추상 클래스는 일부 메소드를 구현하고, 나머지 메소드는 서브 클래스에서 구현하도록 강제하는 클래스입니다. 추상 클래스는 일반 메소드뿐만 아니라 추상 메소드(abstract method)를 가질 수 있습니다.
// 추상 클래스 정의
abstract class Animal {
// 일반 메소드
void eat() {
System.out.println("Animal is eating");
}
// 추상 메소드
abstract void makeSound();
}
// 추상 클래스를 상속받은 구현 클래스
class Dog extends Animal {
@Override
void makeSound() {
System.out.println("Dog barks");
}
}
// 다른 추상 클래스를 상속받은 구현 클래스
class Cat extends Animal {
@Override
void makeSound() {
System.out.println("Cat meows");
}
}
추상 클래스는 상속 관계에서 공통된 구현을 가지는 클래스들에 대한 추상화를 제공합니다. 또한, 추상 메소드를 통해 서브 클래스에서 반드시 구현해야 하는 메소드를 명시함으로써, 강제성을 부여합니다.
두 개념 모두 코드의 재사용성을 증가시키고 다형성을 구현하는 데 기여합니다. 일반적으로 인터페이스는 더 유연한 형태의 다중 상속을 지원하며, 추상 클래스는 공통된 구현을 가진 클래스들을 위한 추상화를 제공합니다. 선택은 문제의 상황과 설계 목표에 따라 이루어져야 합니다.