728x90
반응형
Java에서는 **객체 지향 프로그래밍(OOP)**의 중요한 개념 중 하나로 **추상화(Abstraction)**가 있습니다. 추상화는 구현을 숨기고 중요한 기능만 제공하는 개념으로, Java에서는 **추상 클래스(Abstract Class)와 인터페이스(Interface)**를 통해 이를 실현합니다. 두 개념은 유사하지만 사용 목적과 기능이 다르므로 비교하여 이해하는 것이 중요합니다.
1. 인터페이스(Interface)란?
✅ 인터페이스의 개념
- 인터페이스는 추상 메서드(구현 없이 선언만 있는 메서드)와 상수만 포함하는 설계도입니다.
- 다중 상속이 가능하여 여러 클래스에서 같은 인터페이스를 구현할 수 있습니다.
- interface 키워드를 사용하여 선언합니다.
✅ 인터페이스 사용 예제
interface Animal {
void makeSound(); // 추상 메서드 (구현 없음)
}
class Dog implements Animal {
public void makeSound() {
System.out.println("멍멍!");
}
}
public class Main {
public static void main(String[] args) {
Animal myDog = new Dog();
myDog.makeSound();
}
}
출력 결과:
멍멍!
🔹 인터페이스는 implements 키워드를 사용하여 구현합니다. 🔹 모든 메서드는 기본적으로 public abstract이며, 반드시 구현해야 합니다.
2. 추상 클래스(Abstract Class)란?
✅ 추상 클래스의 개념
- 추상 클래스는 추상 메서드(구현이 없는 메서드)와 일반 메서드(구현이 있는 메서드)를 포함할 수 있는 클래스입니다.
- 단일 상속만 가능합니다.
- abstract 키워드를 사용하여 선언합니다.
✅ 추상 클래스 사용 예제
abstract class Animal {
abstract void makeSound(); // 추상 메서드
void sleep() {
System.out.println("잠자는 중...");
}
}
class Cat extends Animal {
public void makeSound() {
System.out.println("야옹!");
}
}
public class Main {
public static void main(String[] args) {
Animal myCat = new Cat();
myCat.makeSound();
myCat.sleep();
}
}
출력 결과:
야옹!
잠자는 중...
🔹 추상 클래스는 extends 키워드를 사용하여 상속합니다. 🔹 추상 클래스는 일반 메서드도 가질 수 있으며, abstract 메서드는 반드시 오버라이딩해야 합니다.
3. 인터페이스와 추상 클래스 비교
비교 항목인터페이스 (Interface)추상 클래스 (Abstract Class)
| 상속 관계 | 다중 상속 가능 (implements) | 단일 상속만 가능 (extends) |
| 메서드 포함 여부 | 모든 메서드는 추상 메서드(자바 8 이후 default 메서드 가능) | 추상 메서드 + 일반 메서드 포함 가능 |
| 변수 포함 여부 | static과 final(상수)만 가능 | 인스턴스 변수 선언 가능 |
| 생성자 | 생성자 없음 | 생성자 사용 가능 |
| 사용 목적 | 특정 기능을 구현하도록 강제 (규격 제공) | 기본적인 동작을 정의하고 하위 클래스에서 확장 |
4. 언제 인터페이스와 추상 클래스를 사용할까?
✅ 인터페이스를 사용할 때:
- 여러 개의 부모 인터페이스를 상속받아야 할 때 (다중 상속이 필요할 때)
- 클래스 간 공통된 메서드의 구현을 강제해야 할 때
- 객체의 동작을 정의하고 싶을 때 (예: Comparable, Runnable)
✅ 추상 클래스를 사용할 때:
- 일부 공통 메서드의 구현을 제공하면서, 특정 메서드는 하위 클래스에서 구현하도록 강제할 때
- 상속을 통해 클래스를 확장하고 공통 로직을 공유해야 할 때
- 객체의 속성과 동작을 정의하는 베이스 클래스로 사용하고 싶을 때
결론
Java에서 인터페이스와 추상 클래스는 각각 다른 목적을 가지고 있습니다.
- 인터페이스는 특정 동작을 정의하고 이를 여러 클래스에서 구현하도록 강제합니다.
- 추상 클래스는 공통 기능을 제공하면서 일부 메서드는 하위 클래스에서 구현하도록 유도합니다.
적절한 상황에서 인터페이스와 추상 클래스를 활용하면 유지보수성이 뛰어나고 확장성이 높은 객체지향 프로그램을 개발할 수 있습니다. 🚀
728x90
반응형
'IT > JAVA' 카테고리의 다른 글
| Java에서 예외 처리하는 방법 (try-catch, throw, finally) (0) | 2025.02.26 |
|---|---|
| Java의 static과 final 키워드 활용법 (1) | 2025.02.25 |
| Java클래스와 객체의 차이 및 생성자 사용법(Class, Object, Constructor) (1) | 2025.02.23 |
| Java객체지향 프로그래밍 개념 (캡슐화, 상속, 다형성) (2) | 2025.02.22 |
| Java의 메서드와 매개변수 사용법 (2) | 2025.02.21 |