📚인터페이스가 무엇인지 알아봅시다.
표준입니다.📚인터페이스를 사용해야하는 이유를 알아봅시다.
표준이 있는 이유와 똑같습니다.⚠️자동차를 예시로 인터페이스 왜 필요한지 알아봅시다.
LuxuryCar 와 SpeedCar 모두 자동차를 구현하고 있습니다.LuxuryCar 를 이용하는 경우 move() 메서드로 주행할 수있지만SpeedCar 를 이용하는 경우 drive() 메서드를 활용해 주행해야합니다.
class LuxuryCar {
void move() {
System.out.println("멋지게 이동합니다.");
}
void stop() {
System.out.println("멋지게 정지합니다.");
}
}
class SpeedCar {
void drive() {
System.out.println("빠르게 주행을 합니다.");
}
}
public class Main {
public static void main(String[] args) {
LuxuryCar car1 = new LuxuryCar();
SpeedCar car2 = new SpeedCar();
// ❌ 일관되지 않은 주행 명령어
car1.move();
car1.stop();
// ❌ 일관되지 않은 주행 명령어 + 멈출수 없음
car2.drive();
}
}
📚인터페이스를 잘 활용한 경우
implements 키워드로 인터페이스를 활용할 수 있습니다.구현체 라고 합니다.interface Car {
void drive();
void stop();
}

class LuxuryCar implements Car {
@Override
void drive() { // ✅ 인터페이스 규칙 준수
System.out.println("멋지게 이동합니다."); // 구현 내용은 자유롭습니다.
}
@Override
void stop() { // ✅ 인터페이스 규칙 준수
System.out.println("멋지게 정지합니다."); // 구현 내용은 자유롭습니다.
}
void charge() { // 🎉 CarA 만의 기능을 확장 가능합니다.
System.out.println("차량을 충전합니다");
}
}
class SpeedCar implements Car {
@Override
void drive() { // ✅ 인터페이스 규칙 준수
System.out.println("빠르게 이동합니다."); // 구현 내용은 자유롭습니다.
}
@Override
void stop() { // ✅ 인터페이스 규칙 준수
System.out.println("빠르게 정지합니다."); // 구현 내용은 자유롭습니다.
}
void autoParking() { // 🎉 CarB 만의 기능을 확장 가능합니다.
System.out.println("자동 주차 기능을 실행합니다.");
}
}
public class Main {
public static void main(String[] args) {
LuxuryCar car1 = new LuxuryCar();
SpeedCar car2 = new SpeedCar();
// ✅ 각 차량의 공통 기능
car1.drive();
car1.stop();
car2.drive();
car2.stop();
// ✅각 차량의 고유 기능
car1.charge();
car2.autoParking();
}
}
💡
인터페이스를 응용하는 방법이 두 가지 있습니다.
1️⃣인터페이스 다중구현
2️⃣인터페이스 다중상속
📚인터페이스 다중 구현을 알아봅시다.
implements 키워드로 다수의 인터페이스를 구현할수 있습니다.Animal , Flyable)를 구현한 경우 다중구현 이라고 합니다.
// 🚀 "동물의 기본 기능" 인터페이스
interface Animal {
void eat();
}
// ✈ "나는 기능" 인터페이스
interface Flyable {
void fly();
}
// ✅ 다중 구현
class Bird implements Animal, Flyable {
public void eat() {
System.out.println("새가 먹이를 먹습니다.");
}
public void fly() {
System.out.println("새가 하늘을 납니다.");
}
// 추가적으로 land() 메서드도 가능하지만 필수는 아님
public void land() {
System.out.println("새가 착륙합니다.");
}
}
// 실행 코드
public class Main {
public static void main(String[] args) {
Bird bird = new Bird();
bird.eat(); // "새가 먹이를 먹습니다."
bird.fly(); // "새가 하늘을 납니다."
bird.land(); // "새가 착륙합니다."
}
}
📚인터페이스 다중상속을 알아봅시다.
extends 키워드로 상속을 구현할 수 있습니다.// 1. 기본 인터페이스: 동물의 기본 기능
interface Animal {
void eat();
}
// 2. 추가 인터페이스: 나는 기능
interface Flyable {
void fly();
}
// 3. ✅ 다중 상속새로운 인터페이스: 동물 + 나는 기능
interface FlyableAnimal extends Animal, Flyable {
void land(); // 추가 기능
}
// 4. 새 클래스 (FlyableAnimal을 구현)
class Bird implements FlyableAnimal {
public void eat() {
System.out.println("새가 먹이를 먹습니다.");
}
public void fly() {
System.out.println("새가 하늘을 납니다.");
}
public void land() {
System.out.println("새가 착륙합니다.");
}
}
// 5. 실행 코드
public class Main {
public static void main(String[] args) {
Bird bird = new Bird();
bird.eat(); // "새가 먹이를 먹습니다."
bird.fly(); // "새가 하늘을 납니다."
bird.land(); // "새가 착륙합니다."
}
}
📚변수 선언시 형식에 관계 없이 자동으로 상수로 선언됩니다.
public static final 로 선언됩니다.static 으로 선언되기 때문에 구현체 없이도 활용 가능합니다.public interface Config {
int POPULATION = 100; // public static final 로 선언됩니다.
}
public class Main {
public static void main(String[] args) {
System.out.println(Config.POPULATION);
}
}