JAVA/Information
[Java] 추상클래스와 인터페이스의 차이점?
Huiyeon
2024. 3. 20. 06:32
안녕하세요 오늘은 추상클래스와 인터페이스의 차이점에 대해 알아보려고 합니다.
1. 목적
- 추상클래스: 추상클래스는 부분적으로 구현된 클래스로, 상속받는 자식 클래스에게 특정 메소드의 구현을 강제하기 위해 사용됩니다. 즉, 일부 공통적인 기능을 구현하고 나머지는 상속받는 클래스에서 구현합니다.
- 인터페이스: 인터페이스는 모든 메소드가 추상메소드로만 이루어져 있으며, 특정 기능을 구현하는 데 필요한 메소드의 명세만을 제공합니다. 클래스가 인터페이스를 구현할 때는 인터페이스에 정의된 모든 메소드를 구현해야 합니다.
2. 구현 방법
- 추상클래스: 하나의 추상클래스만 상속받을 수 있습니다.
ex) 동물을 추상화한 Animal 클래스에서 sleep메소드는 모든 동물이 공통으로 가지는 행위입니다.
makeSound는 동물마다 다르기 때문에 추상 메소드로 선언합니다.
그리고 Cat 클래스에서 Animal클래스를 상속받아 makeSound메소드를 구현합니다.
abstract class Animal {
// 추상 메소드
abstract void makeSound();
// 구현된 메소드
public void sleep() {
System.out.println("Zzz");
}
}
class Cat extends Animal {
// 추상 클래스에서 상속받은 추상 메소드 구현
void makeSound() {
System.out.println("Meow");
}
}
public class Main {
public static void main(String[] args) {
Cat myCat = new Cat();
myCat.makeSound(); // Meow
myCat.sleep(); // Zzz
}
}
- 인터페이스: 여러 인터페이스를 구현할 수 있습니다.
ex) Movable 인터페이스에는 move라는 메소드가 정의되어 있고, Car와 Bicycle 클래스에서 이 인터페이스를 구현해보도록 하겠습니다. 각 클래스에는 move 메소드를 원하는 방식대로 구현하시면 됩니다.
interface Movable {
void move();
}
class Car implements Movable {
public void move() {
System.out.println("차가 네 바퀴로 움직입니다.");
}
}
class Bicycle implements Movable {
public void move() {
System.out.println("자전거가 두 바퀴로 움직입니다.");
}
}
public class Main {
public static void main(String[] args) {
Car myCar = new Car();
Bicycle myBike = new Bicycle();
myCar.move(); // 차가 네 바퀴로 움직입니다.
myBike.move(); // 자전거가 두 바퀴로 움직입니다.
}
}
위에 두 예시를 보시는 거와 같이 각각 특정 상황에서 유용하게 사용하실 수 있습니다.
-> 추상클래스는 공통된 기능을 가진 클래스들의 '계층 구조' 를 구성할때 유용
-> 인터페이스는 서로 다른 클래스들이 동일한 기능을 구현 할때 사용
3. 멤버 변수
- 추상클래스: 상패(멤버 변수)를 가질 수 있습니다.
- 인터페이스: 상태를 가질 수 없고, 상수만 가질 수 있습니다.
4. 접근 제어자
- 추상클래스: 다양한 접근 제어자를 사용하실 수 있습니다. (public, protected, prevate 등)
- 인터페이스: default메소드와 static 메소드, Java 9부터는 private 메소드도 사용이 가능합니다.
반응형