코딜기

[Java] 인터페이스 (Interface) 본문

Language/Java

[Java] 인터페이스 (Interface)

코딜기 2024. 9. 21. 19:59
반응형

인터페이스 (Interface)란?

  • 인터페이스는 구현하고자 하는 클래스에 동일한 목적 아래 동일한 기능을 수행하도록 강제하는 틀의 역할을 합니다.
  • 자바의 다형성을 극대화하여 개발 코드의 유지보수성을 높이고, 수정을 최소화하는 역할을 합니다.

인터페이스 사용

public interface Animal {
    //int i;  (x)
    //public Animal() {} (x)
    public static final name = "Animal";
    void move();
}

public interface Mammals {
    void feeding();
}

public interface Bird extends Animal {
    void fly();
}
  • 인터페이스 추상 메서드만 가질 수 있으며, 객체를 생성하기 위한 개념이 아니기 때문에, 어떠한 데이터도 저장할 수 없고, 생성자도 선언할 수 없습니다.
  • 인터페이스 내에서는 실체가 없는 추상 메서드만 선언할 수 있지만, 상수를 선언하거나 static 메서드를 선언하는 것은 가능합니다.
  • 인터페이스들 간의 상속이 가능하며, 다중 상속도 허용됩니다.
  • 인터페이스는 데이터를 저장할 수 없고, 단순히 껍데기들끼리 상속하는 것이기 때문에, 클래스에서 발생할 수 있는 다중 상속 문제가 인터페이스에서는 발생하지 않습니다.

public class Dog implements Animal, Mammals {
    @Override
    public void move() {
        System.out.println("강아지가 이동합니다.");
    }
		
    @Override
    public void feeding() {
        System.out.println("강아지가 사료를 먹습니다.");
    }
}
public class Eagle implements Bird {
    @Override
    public void move() {
        System.out.println("독수리가 이동합니다.");
    }
		
    @Override
    public void fly() {
        System.out.println("독수리는 날 수 있습니다.");
    }
}
  • implements 키워드는 인터페이스를 구현할 때 사용됩니다.
  • 인터페이스에 선언된 추상 메서드는 반드시 구현해야 합니다.
  • 인터페이스는 여러 개를 동시에 구현할 수 있습니다.
    • Dog 클래스는 AnimalMammals 두 개의 인터페이스를 동시에 구현하고 있으며, 각각의 추상 메서드를 오버라이딩하는 것을 볼 수 있습니다.
    • 반면, Eagle 클래스는 Bird만 구현하고 있지만, BirdAnimal을 상속하고 있기 때문에, 부모 인터페이스의 추상 메서드인 move도 함께 구현해야 합니다.

public class Main {
    public static void main(String[] args) {
        Animal animal1 = new Dog();
        Mammals m = new Dog();
        
        Animal animal2 = new Eagle();
        Bird b = new Eagle();
        
        animal1.move();
        //m.move(); (x) Mammals는 move와 관계가 없다.
        ((Animal) m).move(); // Mammals 타입을 Animal로 즉시 형변환이 가능.

        // 둘 다 가능.
        b.move();
        b.fly();
    }
}
  • 인터페이스는 다형성에서 클래스 타입보다 훨씬 더 유연하게 동작합니다.
  • 구현 클래스는 자신이 구현한 모든 인터페이스 타입을 가질 수 있습니다.
  • 또한, 하나의 클래스가 여러 개의 인터페이스를 구현했다면, 해당 인터페이스들 간에는 즉시 형 변환이 가능합니다.
반응형
Comments