Back-End/Java
09. 인터페이스(Interface)
Yerin Thea Yoo
2026. 2. 11. 23:54
인터페이스는 객체가 반드시 구현해야 할 기능의 규약(계약)을 정의하는 구조다.
클래스가 설계도라면, 인터페이스는 기능 명세서에 가깝다.
1. 인터페이스란?
interface Animal {
void sound();
}
특징
- interface 키워드 사용
- 메서드는 기본적으로 public abstract
- 객체 생성 불가
2. 구현(implements)
인터페이스는 상속이 아니라 구현한다.
class Dog implements Animal {
@Override
public void sound() {
System.out.printIn("멍멍");
}
}
- implements 키워드 사용
- 모든 추상 메서드를 반드시 구현해야 함
3. 인터페이스와 다형성
인터페이스도 다형성을 제공한다.
Animal a = new Dog();
a.sound();
- 참조 타입 → 인터페이스
- 실제 객체 → 구현 클래스
인터페이스는 다형성을 위한 가장 강력한 도구다.
4. 다중 구현 가능
클래스는 단일 상속만 가능하지만, 인터페이스는 여러 개 구현할 수 있다.
interface Flyable {
void fly();
}
interface Swimable {
void swim();
}
class Duck implements Flyable, Swimable {
public void fly() {}
public void swim() {}
}
5. default 메서드
interface Animal {
default void breathe() {
System.out.printIn("숨 쉰다.");
}
}
- default 키워드 사용
- 구현 클래스에서 재정의 가능
6. static 메서드
interface Animal {
static void info() {
Systme.out.printIn("동물 인터페이스");
}
}
인터페이스 이름으로 직접 호출한다.
Animal.info();
7. 필드
인터페이스의 변수는 자동으로 다음 속성을 가진다.
- public
- static
- final
즉, 상수만 정의 가능하다.
int MAX = 10;
8. 추상 클래스 vs. 인터페이스
| 구분 | 추상 클래스 | 인터페이스 |
| 키워드 | abstract class | interface |
| 다중 상속 | 불가능 | 가능 |
| 필드 | 일반 필드 가능 | 상수만 가능 |
| 목적 | 부분 구현 + 공통 상태 | 기능 규약 정의 |
| 생성자 | 존재 | 없음 |
9. 설계 관점에서의 차이
1) 추상 클래스
- "~이다(is-a)" 관계
- 강한 결합
- 공통 상태 공유
2) 인터페이스
- "~할 수 있다(can-do)" 관계
- 느슨한 결합
- 역할 중심 설계
3) 예시
- Dog is an Animal → 상속
- Dog can Fly → 인터페이스
10. 왜 인터페이스가 중요한가?
실무에서는 인터페이스 기반 설계를 가장 많이 사용한다.
이유
- 구현과 분리
- 교체 가능성 확보
- 테스트 용이
- 유지보수 편리
ex.
List<String> list = new ArrayList<>();
왼쪽은 인터페이스, 우측은 구현체
이 구조가 Java 설계의 기본 패턴이다.