자바
[JAVA] 인터페이스(Interface)
planting grass
2025. 3. 13. 09:56
728x90
인터페이스
Java에서는 단일 상속을 원칙으로 한다.
때문에, 다중 상속이 필요한 경우를 위해 인터페이스가 존재한다.
인터페이스는 클래스가 특정 메서드를 반드시 구현하도록 강제하는 역할을 하며, 다중 인터페이스 구현을 통해 다중 상속과 유사한 효과를 낼 수 있는 객체 지향 설계 요소이다.
1. 목적
- 클래스 간 결합도를 낮추고 유연성을 높이기 위함
- 인터페이스를 통해 클래스 간 의존성을 줄이고 확장성을 높일 수 있다.
- 다중 상속 효과를 제공하기 위함
- Java는 클래스 다중 상속을 지원하지 않지만, 인터페이스를 활용하면 여러 개의 인터페이스를 동시에 구현이 가능하다.
즉, 다중 상속과 유사한 효과를 낼 수 있음.
- Java는 클래스 다중 상속을 지원하지 않지만, 인터페이스를 활용하면 여러 개의 인터페이스를 동시에 구현이 가능하다.
- 공통된 기능을 강제하여 일관된 설계 제공
- 같은 인터페이스를 구현한 클래스들은 일관된 메서드 형식을 유지해야 함.
2. 특징
- 객체 생성이 불가능하다.
- 인터페이스 자체로는 객체를 만들 수 없다.
- 반드시 구현한 클래스의 인스턴스를 통해 사용해야 한다.
- 모든 메서드는 기본적으로
public abstract
(추상 메서드)- 구현 클래스에서 반드시 오버라이딩해야 한다.
- 모든 필드는
public static final
(상수)- 인터페이스 내부에서 변수를 선언하면 자동으로
public static final
이 적용된다.
- 인터페이스 내부에서 변수를 선언하면 자동으로
- 다중 구현 가능 (implements)
- Java에서는 하나의 클래스가 여러 개의 인터페이스를 동시에 구현할 수 있다.
→ 이는 다중 상속과 유사한 효과를 제공한다.
- Java에서는 하나의 클래스가 여러 개의 인터페이스를 동시에 구현할 수 있다.
- Java 8부터
default
및static
메서드 지원
3. 사용 예시
1. 기본 사용
// 인터페이스 정의
interface Animal {
void makeSound(); // 추상 메서드 (public abstract 자동 적용)
}
// 인터페이스 구현
class Dog implements Animal {
@Override
public void makeSound() {
System.out.println("Woof woof!");
}
}
class Cat implements Animal {
@Override
public void makeSound() {
System.out.println("Meow!");
}
}
// 사용
public class Main {
public static void main(String[] args) {
Animal myDog = new Dog();
Animal myCat = new Cat();
myDog.makeSound(); // Woof woof!
myCat.makeSound(); // Meow!
}
}
2. 다중 인터페이스 구현 (다중 상속 효과)
// 인터페이스 1
interface CanRun {
void run();
}
// 인터페이스 2
interface CanSwim {
void swim();
}
// 다중 인터페이스 구현
class Dog implements CanRun, CanSwim {
@Override
public void run() {
System.out.println("Dog is running.");
}
@Override
public void swim() {
System.out.println("Dog is swimming.");
}
}
public class Main {
public static void main(String[] args) {
Dog myDog = new Dog();
myDog.run(); // Dog is running.
myDog.swim(); // Dog is swimming.
}
}
3. default
및 static
메서드 활용
interface CanFly {
void fly();
// default 메서드 (기본 구현 제공)
default void showInfo() {
System.out.println("This is a flying object.");
}
// static 메서드 (인터페이스에서 직접 호출 가능)
static void displayMessage() {
System.out.println("Flying objects can move through the air.");
}
}
class Bird implements CanFly {
@Override
public void fly() {
System.out.println("Bird is flying.");
}
}
public class Main {
public static void main(String[] args) {
Bird bird = new Bird();
bird.fly(); // Bird is flying.
bird.showInfo(); // This is a flying object.
// static 메서드는 인터페이스 자체에서 호출
CanFly.displayMessage(); // Flying objects can move through the air.
}
}
728x90