추상 클래스는 공통된 메서드와 필드를
'상속받는 하위 클래스'에서 재사용하거나 활용할 수 있도록 설계된다.
구현된 메서드와 추상 메서드(구현되지 않고 하위 클래스에서 구현해야만 하는 메서드)를 모두 가질 수 있고,
주로 상향식 설계에서 사용되며,
관련 클래스 간 공통된 기능을 모아 캡슐화하고 코드 재사용성을 높이는데 유용하람쥐
인터페이스는 클래스가 구현해야 할 메서드를 미리 선언만 하고,
실제 구현을 구현하는 클래스에 위임한다.
다중 구현이 가능하고, 클래스가 특정 행동(메서드)을 반드시 구현하도록 강제하고 싶을 때 !! 밀이
하향식 설계에 적합하다고 볼 수 있다
즉, 추상 클래스는 "공통된 기능을 캡슐화"하는 데 중점을 두고, 인터페이스는 "행동 규약을 강제"하는 데 초점이 맞춰져 있다람쥐
추상 클래스
추상 클래스는 공통된 기능을 캡슐화하고, 하위 클래스가 이를 재사용하거나 확장하도록 설계된다
// 추상 클래스
abstract class Animal {
// 공통된 구현 메서드
void eat() {
System.out.println("This animal eats food.");
}
// 추상 메서드 (하위 클래스가 반드시 구현)
abstract void sound();
}
// 하위 클래스 1
class Dog extends Animal {
@Override
void sound() {
System.out.println("Woof!");
}
}
// 하위 클래스 2
class Cat extends Animal {
@Override
void sound() {
System.out.println("Meow!");
}
}
// 테스트 클래스
public class Main {
public static void main(String[] args) {
Animal dog = new Dog();
Animal cat = new Cat();
dog.eat(); // 공통 메서드 사용
dog.sound(); // 하위 클래스에서 구현한 메서드 호출
cat.eat(); // 공통 메서드 사용
cat.sound(); // 하위 클래스에서 구현한 메서드 호출
}
}
- eat()는 모든 동물이 공통으로 가지는 기능이므로 추상 클래스에서 구현
- sound()는 동물마다 다르게 구현되므로 추상 메서드로 정의하고, 각 하위 클래스에서 구현하도록 강제
인터페이스
인터페이스는 클래스가 특정 행동(메서드)을 반드시 구현하도록 강제
// 인터페이스
interface Vehicle {
// 구현해야 할 메서드 선언
void start();
void stop();
}
// 구현 클래스 1
class Car implements Vehicle {
@Override
public void start() {
System.out.println("Car is starting.");
}
@Override
public void stop() {
System.out.println("Car is stopping.");
}
}
// 구현 클래스 2
class Bike implements Vehicle {
@Override
public void start() {
System.out.println("Bike is starting.");
}
@Override
public void stop() {
System.out.println("Bike is stopping.");
}
}
// 테스트 클래스
public class Main {
public static void main(String[] args) {
Vehicle car = new Car();
Vehicle bike = new Bike();
car.start();
car.stop();
bike.start();
bike.stop();
}
}
- Vehicle 인터페이스는 start()와 stop() 메서드를 선언만 하고, 실제 구현은 각 클래스가 필요에 맞게 구현하도록 강제
- Car와 Bike는 같은 Vehicle의 행동 규약을 따르지만, 동작 방식은 다를 수 있음
- 공통 기능(메서드, 필드)이 있다면 → 추상 클래스 사용.
예: Animal 클래스의 eat() 메서드. - 다양한 역할(행동 규약)을 정의하고 강제하고 싶다면 → 인터페이스 사용.
예: Vehicle 인터페이스의 start()와 stop() 메서드.
'Java' 카테고리의 다른 글
추상화....인터페이스... (0) | 2024.12.24 |
---|---|
클라이언트 ip 가져오기 (0) | 2024.12.24 |
캡슐화 (0) | 2024.12.17 |
(지피티 선생님의) InvokeDynamic 특강 (2) | 2024.12.12 |
파라미터 타입이 다른 공통 로직 모듈화 - 어댑터 패턴 (0) | 2024.12.11 |