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 설계의 기본 패턴이다.