인터페이스와 추상 클래스는 객체지향 프로그래밍에서 공통적인 기능을 정의하는 데 사용됩니다. 하지만 둘 사이에는 중요한 차이점이 있습니다.
1. 기본 개념
- 추상 클래스(Abstract Class): 특정 공통 기능을 가진 클래스이지만, 객체로 생성할 수 없습니다. 추상 클래스는 다른 클래스들이 상속받아서 구현을 완성하도록 설계됩니다.
- 인터페이스(Interface): 클래스가 특정 기능을 제공하도록 강제하는 계약서와 같습니다. 인터페이스에 정의된 메서드는 반드시 구현되어야 하며, 다중 상속이 가능합니다.
쉽게 말하면, 추상 클래스는 공통의 기능을 가진 기본 클래스로, 필요한 메서드 일부는 이미 구현되어 있을 수 있습니다. 반면, 인터페이스는 클래스가 어떤 특정 기능을 제공해야 한다는 약속입니다.
2. 차이점
차이점 | 추상 클래스 | 인터페이스 |
---|---|---|
상속 관계 | 단일 상속만 가능 | 다중 상속 가능 |
메서드 구현 | 구현된 메서드 포함 가능 | 모든 메서드는 기본적으로 추상 메서드 |
변수 | 인스턴스 변수와 final 변수 모두 가짐 |
public static final 변수만 가짐 |
상속 키워드 | extends 키워드 사용 |
implements 키워드 사용 |
목적 | 공통 기능 제공, 기본적인 기능 구현 가능 | 특정 기능 제공 강제, 다형성 보장 |
추상 클래스 예시
추상 클래스는 특정 클래스들이 공통으로 가져야 하는 기능을 정의할 때 유용합니다. 예를 들어, 동물(Animal) 클래스는 모두 공통된 "소리내기" 기능을 가질 수 있지만, 구체적인 소리는 각 동물마다 다를 수 있습니다.
abstract class Animal {
// 일반 메서드
void breathe() {
System.out.println("The animal is breathing.");
}
// 추상 메서드
abstract void makeSound();
}
class Dog extends Animal {
@Override
void makeSound() {
System.out.println("Bark");
}
}
class Cat extends Animal {
@Override
void makeSound() {
System.out.println("Meow");
}
}
위 코드에서 Animal
은 추상 클래스입니다. makeSound()
라는 추상 메서드를 선언했으며, 각각의 동물인 Dog
와 Cat
클래스는 이 메서드를 자신만의 방식으로 구현합니다. 이렇게 하면 모든 동물이 소리를 내는 기능은 가지지만, 구체적인 소리 방식은 각 동물마다 다르게 정의할 수 있습니다.
인터페이스 예시
인터페이스는 클래스들이 특정한 기능을 반드시 구현하도록 강제합니다. 예를 들어, 모든 전자 기기는 전원을 켜고 끌 수 있어야 한다고 가정해 보겠습니다. 이럴 때 인터페이스를 사용할 수 있습니다.
interface PowerControl {
void turnOn();
void turnOff();
}
class Television implements PowerControl {
@Override
public void turnOn() {
System.out.println("The TV is on.");
}
@Override
public void turnOff() {
System.out.println("The TV is off.");
}
}
class Radio implements PowerControl {
@Override
public void turnOn() {
System.out.println("The radio is on.");
}
@Override
public void turnOff() {
System.out.println("The radio is off.");
}
}
위 코드에서 PowerControl
인터페이스는 turnOn()
과 turnOff()
메서드를 정의하고 있습니다. Television
과 Radio
클래스는 이 인터페이스를 구현하며, 각각의 전원이 켜지고 꺼지는 방식은 다를 수 있습니다. 하지만 모든 전자 기기가 이 두 가지 메서드를 갖추고 있으므로 전원을 켜고 끌 수 있는 기능은 일관성 있게 유지됩니다.
간단 정리
- 추상 클래스는 "공통적인 기본 기능"을 제공하는 클래스이고, 구현된 메서드를 포함할 수 있습니다.
- 인터페이스는 "특정 기능을 제공하겠다"는 약속을 의미하며, 모든 메서드를 반드시 구현하도록 강제합니다.
- 추상 클래스는 단일 상속만 가능하지만, 인터페이스는 여러 개를 동시에 구현할 수 있습니다.
'객체지향 프로그래밍(OOP)' 카테고리의 다른 글
[쉬운설명] 함수형 프로그래밍 vs 객체지향 프로그래밍: 핵심 차이점 비교 (0) | 2024.12.18 |
---|---|
[Java] 의존성 주입 (Dependency Injection) 개념과 장점 쉽게 이해하기 (3) | 2024.12.18 |
[객체지향 설계] SOLID 원칙 심화: LSP, ISP, DIP 개념과 예제 코드 완벽 정리 (0) | 2024.12.16 |
[소프트웨어 설계] 디자인 패턴 완벽 정리: 싱글톤, 팩토리, 전략 패턴의 개념과 사용 사례 (0) | 2024.10.30 |
[객체지향 프로그래밍] OOP 4대 특성 완벽 정리: 캡슐화, 상속, 다형성, 추상화 개념과 예제 코드 (0) | 2024.10.30 |