1) 추상클래스(Abstract Class)
: 추상클래스는 추상메서드(abstract method)를 포함하고 있는 클래스를 말합니다. 추상메서드란 구체적이지 않은 내용을 정의한 메서드를 말하는 것으로 추상 메서드로 정의된 메서드는 서브 클래스에서 반드시 오버라이딩을 통해 구현해야 합니다.
추상클래스 자체는 new를 통해 인스턴스로 만들 수 없고 반드시 상속을 통해 구체적인 클래스를 만들어서 사용해야 합니다. 추상클래스를 상속해서 구현하는 것을 콘크리트 클래스(Concrete Class)라고도 부릅니다.
2) 인터페이스(Interface)
: 인터페이스는 다른 클래스를 작성할 때 기본이 되는 틀을 제공하면서, 다른 클래스 사이의 중간 매개 역할까지 담당하는 일종의 추상 클래스를 의미합니다. 또한 인터페이스는 상수와 추상 메서드만을 포함할 수 있습니다.
Vehicle 클래스를 인터페이스로 정의하면 다음과 같습니다.
interface Vehicle {
void brand();
}
추상클래스와 다르게 인터페이스는 상속이 아니라 구현으로 클래스를 정의합니다.
class SportsCar implements Vehicle {
...
}
인터페이스는 다중 구현이 가능합니다. 이 경우 양쪽 인터페이스 모두의 추상메서드가 구현돼 있어야 합니다. 상속받을 클래스가 있다면 상속과 함께 사용하는 것도 가능합니다.
class ElectricSportsCar implements Vehicle, Electric {
...
}
class ElectricMotorcycle extends Vehicle implements Eletric {
...
}
3) default 메서드와 static 메서드 사용 예시
interface Vehicle {
void brand();
default go(int speed) {
...
};
static void stop() {
...
}
}
- brand()는 구현 클래스에서 반드시 구현해야 하는 추상메서드입니다.
- go(int speed)는 기본 제공되는 메서드로 필요한 경우 오버라이딩 가능합니다.
- stop()는 static 메서드로 구현 클래스 없이 Vehicle.stop()로 사용 가능합니다.
4) 추상클래스와 인터페이스 실습 예제
public interface Vehicle {
void brand();
}
- 교통수단에 따라 브랜드가 다르므로 brand() 메서드를 구현하도록 정의합니다.
public abstract class Eletric {
private String name;
void move() {
System.out.println("Electric run !!");
}
abstract void charging();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
- 전기차의 종류 이름을 지정할 수 있도록 멤버변수를 추가합니다.
- 전기차를 이동시키는 move() 메서드를 구현합니다.
- 전기차를 충전시키는 방법은 다양하므로 charging() 메서드로 구현할 수 있도록 추상메서드로 선언합니다.
public class EletricSportsCar extends Electric implements Vehicle {
@Override
public void brand() {
System.out.println("FERRARI");
}
@Override
void charging() {
System.out.println(getName() + " go to charging station");
}
public static void main(String[] args) {
ElectricSportsCar es = new ElectricSportsCar();
es.setName("elec sports");
es.brand();
es.move();
es.charging();
}
}
- elec sports라는 이름으로 전기 자동차 인스턴스를 생성합니다.
- 메서드들을 사용해 동작을 확인합니다.
실행결과
FERRARI
Electric run !!
elec sports go to charging station
'JAVA > JAVA 개념' 카테고리의 다른 글
JAVA 개념 4-3 - 패키지와 제어자 (0) | 2023.01.19 |
---|---|
JAVA 개념 4-1 - 상속과 오버라이딩 (0) | 2023.01.03 |
JAVA 개념 3-4 - 키보드 입력과 로깅 (0) | 2022.11.30 |
JAVA 개념 3-3 - 배열 (0) | 2022.11.25 |
JAVA 개념 3-2 - 반복문 (0) | 2022.11.24 |