Java의 **추상화(Abstraction)**는 객체 지향 프로그래밍(OOP)의 네 가지 핵심 원칙 중 하나로, 복잡한 시스템의 세부 구현을 숨기고 중요한 부분만 드러내는 방법을 의미합니다. 추상화를 통해 사용자는 시스템이 어떻게 동작하는지보다는 무엇을 하는지에 집중할 수 있게 됩니다. 추상화는 두 가지 주요 방법으로 구현됩니다: 추상 클래스와 인터페이스입니다.
abstract
키워드를 사용하여 선언되며, 객체를 직접 생성할 수 없는 클래스입니다.abstract class Animal {
abstract void sound(); // 추상 메서드
void breathe() { // 일반 메서드
System.out.println("숨을 쉰다.");
}
}
class Dog extends Animal {
@Override
void sound() {
System.out.println("멍멍!");
}
}
class Cat extends Animal {
@Override
void sound() {
System.out.println("야옹!");
}
}
위의 예시에서 Animal
클래스는 추상 클래스이며, sound()
메서드는 추상 메서드입니다. 이를 상속받은 Dog
와 Cat
클래스는 각각의 방식으로 sound()
메서드를 구현합니다.
interface
키워드를 사용하여 선언되며, 다중 상속을 지원합니다.interface Animal {
void sound(); // 추상 메서드
}
class Dog implements Animal {
@Override
public void sound() {
System.out.println("멍멍!");
}
}
class Cat implements Animal {
@Override
public void sound() {
System.out.println("야옹!");
}
}
위 예시에서 Animal
인터페이스는 sound()
메서드를 정의하고, Dog
와 Cat
클래스는 이를 구현합니다.
항목 | 추상 클래스 | 인터페이스 |
---|---|---|
상속 | 하나의 클래스만 상속 가능 | 여러 인터페이스를 구현할 수 있음 |
메서드 | 일반 메서드와 추상 메서드 모두 가짐 | 자바 8 이전에는 추상 메서드만 가짐 (디폴트 메서드 가능) |
변수 | 인스턴스 변수 가질 수 있음 | 상수만 선언 가능 |
사용 목적 | 기본적인 동작을 제공하고 일부만 재정의 | 여러 클래스에 공통 행동 정의 |