코딜기
[Java] 인터페이스 (Interface) 본문
반응형
인터페이스 (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 클래스는 Animal과 Mammals 두 개의 인터페이스를 동시에 구현하고 있으며, 각각의 추상 메서드를 오버라이딩하는 것을 볼 수 있습니다.
- 반면, Eagle 클래스는 Bird만 구현하고 있지만, Bird가 Animal을 상속하고 있기 때문에, 부모 인터페이스의 추상 메서드인 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();
}
}
- 인터페이스는 다형성에서 클래스 타입보다 훨씬 더 유연하게 동작합니다.
- 구현 클래스는 자신이 구현한 모든 인터페이스 타입을 가질 수 있습니다.
- 또한, 하나의 클래스가 여러 개의 인터페이스를 구현했다면, 해당 인터페이스들 간에는 즉시 형 변환이 가능합니다.
반응형
'Language > Java' 카테고리의 다른 글
[Java] 인터페이스 VS 추상 클래스 (0) | 2024.09.21 |
---|---|
[Java] 추상 클래스와 추상 메서드 (Abstract) (1) | 2024.09.21 |
[Java] 다형성의 instanceof (0) | 2024.09.19 |
[Java] 다형성의 타입 캐스팅 (Type Casting) (0) | 2024.09.19 |
[Java] 다형성 (Polymorphism) (0) | 2024.09.19 |
Comments