본문 바로가기
개발 새발/JAVA

[Java] 자바 객체 지향 - 인터페이스

by recordari 2025. 4. 10.

인터페이스

인터페이스란?

인터페이스는 일종의 추상 클래스지만, 추상 클래스보다 추상화 정도가 높다.
일반 메서드나 멤버 변수는 가질 수 없고, 오직 추상 메서드상수만을 멤버로 가질 수 있다.

  • 모든 메서드는 public abstract
  • 모든 변수는 public static final
    → 생략해도 컴파일러가 자동으로 추가해준다.
public interface Animal {
    void sound();           // public abstract
    int MAX_AGE = 20;       // public static final
}

 

 

 

  • 인터페이스는 인스턴스를 생성할 수 없다.
  • implements 키워드를 사용해 인터페이스를 구현한다.
  • 모든 메서드를 구현하지 않으면, 해당 클래스는 추상 클래스로 선언해야 한다.
interface Animal {
    void sound();
}

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

 

인터페이스 상속

  • 인터페이스는 다른 인터페이스로부터만 상속받을 수 있다.
  • 다중 상속이 가능하다.
interface Flyable {
    void fly();
}

interface Swimmable {
    void swim();
}

interface SuperAnimal extends Flyable, Swimmable {
    void speak();
}

 

 

 

다형성과 인터페이스

인터페이스 타입의 참조변수로 이를 구현한 클래스의 인스턴스를 참조할 수 있다.

Animal dog = new Dog();
dog.sound();  // 멍멍!

 

인터페이스는 매개변수 타입이나 리턴 타입으로도 사용할 수 있고, 인터페이스 타입으로 형변환도 가능하다. 

void makeSound(Animal animal) {
    animal.sound();
}

Animal createAnimal() {
    return new Dog();
}
따라서 인터페이스는 다음과 같이 메서드의 매개변수의 타입으로 사용될 수 있다.
리턴타입이 인터페이스라는 것은 메서드가 해당 인터페이스를 구현한 클래스의 인스턴스를 반환한다는 것을 의미한다.

 

인터페이스의 장점

  1. 개발 시간 단축
    선언부만 알고 있으면 구현 클래스 없이도 개발이 가능하다.
  2. 표준화 가능
    공통의 인터페이스를 기준으로 일관된 개발이 가능하다.
  3. 관계 없는 클래스에 공통점 부여
    서로 관련 없는 클래스들이 하나의 인터페이스를 구현함으로써 관계를 맺을 수 있다.
  4. 독립적인 프로그래밍 가능
    인터페이스를 사용하면 클래스 간 결합도를 낮춰 유지보수가 쉬운 코드가 된다.

 

예시 코드

interface Soundable {
    void sound();
}

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

class Robot implements Soundable {
    public void sound() {
        System.out.println("삐비빅!");
    }
}

public class Main {
    public static void main(String[] args) {
        Soundable s1 = new Dog();
        Soundable s2 = new Robot();

        s1.sound(); // 멍멍!
        s2.sound(); // 삐비빅!
    }
}