사물이나 표상을 어떤 성질, 공통성, 본질에 착안하여 그것을 추출하여 파악하는 것
객체 지향 프로그래밍에서의 추상화
객체의 공통적인 속성과 기능을 추출하여 정의하는 것

하위 클래스 : 자동차, 오토바이
상위 클래스 : 이동수단
공통적인 속성과 기능 추출
public interface Vehicle {
public abstract void start();
void moveForward(); // public abstract 키워드는 생략 가능
void moveBackward();
}
서로 다른 두 시스템, 장치, 소프트웨어 따위를 서로 이어주는 부분 또는 그런 접속 장치
인터페이스는 어떤 객체의 역할만 정의하여 객체들관의 관계를 연결하는 것
인터페이스에는 추상 메서드나 상수를 통해 어떤 객체가 수행해야 하는 핵심적인 역할만을 규정하고 실제 구현은 해당 인터페이스를 구현하는 각각의 객체들에서 하도록 프로그램을 설계하는 것
public class Car implements Vehicle{ //이동수단을 구체화한 자동차 클래스
@Override
public void moveForward() {
System.out.println("자동차가 앞으로 전진합니다");
}
@Override
public void moveBackware() {
System.out.println("자동차가 뒤로 후진합니다");
}
}
public class MotorBike implements Vehicle{ //이동수단을 구체화한 오토바이 클래스
@Override
public void moveForward() {
System.out.println("오토바이가 앞으로 전진합니다");
}
@Override
public void moveBackware() {
System.out.println("오토바이가 뒤로 후진합니다");
}
}
다음과 같이 interface에서 정의한 역할을 각각의 클래스에 맞게 구현
기존의 클래스를 재활용하여 새로운 클래스를 작성하는 자바의 문법 요소
상위 클래스의 기능과 속성들을 그대로 사용할 수도 있지만, 각각의 클래스에 맞게 메서드 오버라이딩을 사용해 내용 재정의 가능