백엔드/Java

인터페이스

Ryuzy 2025. 5. 20. 17:27
728x90
반응형

1. 인터페이스

자바에서 인터페이스(Interface)는 클래스가 구현해야 할 동작(기능)의 틀만 정의해놓은 일종의 "설계서"입니다. 인터페이스는 메서드의 선언만 포함하고, 구현은 하지 않으며, 해당 인터페이스를 implements 키워드로 구현한 클래스가 모든 메서드를 오버라이딩하여 실제 동작을 정의해야 합니다. 자바는 다중 상속을 지원하지 않지만, 인터페이스를 통해 다중 구현이 가능하므로 다양한 클래스들이 공통적인 동작을 약속받고 서로 다른 방식으로 동작하도록 설계할 수 있습니다. 이는 다형성과 확장성 있는 구조를 만드는 데 매우 유용합니다.

모든 메서드는 기본적으로 public abstract 구현하지 않고 선언만 한다는 뜻
모든 필드는 public static final (상수) 값을 바꿀 수 없는 상수만 선언 가능
다중 구현 가능 클래스는 여러 인터페이스를 implements 할 수 있음
인터페이스는 new로 인스턴스화할 수 없음 반드시 구현 클래스가 필요

 

public interface Animal {
    void sound();            // 추상 메서드
    void move();             // 추상 메서드
}
  • 여기서 void sound() 와 void move()는 구현하지 않은 메서드입니다.
  • 이 인터페이스를 구현(implements)한 클래스는 반드시 이 메서드들을 오버라이딩해야 합니다.

 

public interface Animal {
    void sound();    // 소리내기
    void move();     // 움직이기
}

public class Dog implements Animal {
    @Override
    public void sound() {
        System.out.println("멍멍!");
    }

    @Override
    public void move() {
        System.out.println("개가 네 발로 뜁니다.");
    }
}

public class Bird implements Animal {
    @Override
    public void sound() {
        System.out.println("짹짹!");
    }

    @Override
    public void move() {
        System.out.println("새가 날아갑니다.");
    }
}

public class InterfaceExample {
    public static void main(String[] args) {
        Animal dog = new Dog();
        Animal bird = new Bird();

        dog.sound();  // 멍멍!
        dog.move();   // 개가 네 발로 뜁니다.

        bird.sound(); // 짹짹!
        bird.move();  // 새가 날아갑니다.
    }
}

 

 

2. 종합예제

객체지향 설계 실습 : 다기능 로봇 시스템

public interface Cleaner {
    void clean();
}

public interface Cooker {
    void cook();
}

public interface Singer {
    void sing();
}

public interface Dancer {
    void dance();
}

 

public abstract class Robot {
    String modelName;

    public Robot(String modelName) {
        this.modelName = modelName;
    }

    public void identify() {
        System.out.println("🤖 안녕하세요! 저는 " + modelName + " 로봇입니다.");
    }
}

 

public class MultiRobot extends Robot implements Cleaner, Cooker, Singer, Dancer {

    public MultiRobot(String modelName) {
        super(modelName);
    }

    @Override
    public void clean() {
        System.out.println("🧹 [" + modelName + "] 청소를 시작합니다.");
    }

    @Override
    public void cook() {
        System.out.println("🍳 [" + modelName + "] 요리를 시작합니다.");
    }

    @Override
    public void sing() {
        System.out.println("🎵 [" + modelName + "] 노래를 부릅니다.");
    }

    @Override
    public void dance() {
        System.out.println("💃 [" + modelName + "] 멋지게 춤을 춥니다!");
    }
}

 

public class RobotTest {
    public static void performFunction(Cleaner cleaner) {
        cleaner.clean();
    }

    public static void performFunction(Cooker cooker) {
        cooker.cook();
    }

    public static void performFunction(Singer singer) {
        singer.sing();
    }

    public static void performFunction(Dancer dancer) {
        dancer.dance();
    }

    public static void main(String[] args) {
        MultiRobot roboX = new MultiRobot("Robo-X");
        roboX.identify();

        System.out.println("\n[일반 호출]");
        roboX.clean();
        roboX.cook();
        roboX.sing();
        roboX.dance();

        System.out.println("\n[다형성 활용: 기능별 인터페이스로 호출]");
        performFunction((Cleaner) roboX);
        performFunction((Cooker) roboX);
        performFunction((Singer) roboX);
        performFunction((Dancer) roboX);
    }
}
728x90
반응형
댓글수1