Java 인터페이스(Interface) 완벽 정리 – 왜 사용하는지 예제로 설명
Java 인터페이스(Interface)는
객체지향 설계에서 결합도를 낮추고, 변경에 강한 구조를 만들기 위해 사용되는 핵심 개념이다.
단순히 문법으로만 이해하면
“추상 클래스랑 뭐가 다른데?” 수준에서 끝나기 쉽다.
이 글에서는
인터페이스의 정의 → 기본 문법 → 왜 사용하는지 → 예제 → 설계 관점의 장점까지
한 번에 정리한다.
1. 인터페이스란 무엇인가?
인터페이스는
구현 없이 메서드의 선언만 정의한 타입이다.
즉,
“무엇을 할 수 있는지”만 정의하고
“어떻게 할 것인지는 구현 클래스에 맡기는 구조”다.
public interface Soundable {
void makeSound();
}
- 구현 코드 없음
- 메서드 시그니처만 존재
- 인스턴스 생성 불가
👉 객체 간의 약속(Contract) 역할을 한다.
2. 인터페이스의 기본 문법
public interface Vehicle {
void start();
void stop();
default void info() {
System.out.println("Vehicle interface");
}
}
특징
- 모든 메서드는 기본적으로
public abstract - 필드는
public static final - Java 8부터
default,static메서드 허용
3. 인터페이스 구현 방법
클래스는 implements 키워드를 사용해 인터페이스를 구현한다.
public class Car implements Vehicle {
@Override
public void start() {
System.out.println("Car started");
}
@Override
public void stop() {
System.out.println("Car stopped");
}
}
👉 인터페이스에 정의된 메서드는 반드시 구현해야 한다.
4. 인터페이스를 왜 사용하는가? (예제로 이해하기)
1️⃣ 다형성을 활용하기 위해
public void playSound(Soundable soundable) {
soundable.makeSound();
}
Soundable dog = new Dog();
Soundable cat = new Cat();
playSound(dog);
playSound(cat);
- 호출 코드는 구현체를 몰라도 된다
- 객체 교체가 자유롭다
👉 다형성의 핵심 도구
2️⃣ 결합도를 낮추기 위해
인터페이스를 사용하면
코드는 구현 클래스가 아닌 인터페이스에 의존하게 된다.
public class Player {
private final Soundable soundable;
public Player(Soundable soundable) {
this.soundable = soundable;
}
}
👉 구현 변경 시 코드 수정 최소화
👉 유지보수성과 확장성 향상
3️⃣ 협업과 역할 분리를 위해
- 인터페이스 먼저 정의
- 구현은 각자 진행
팀 A: 인터페이스 설계
팀 B: 구현 클래스 작성
👉 협업 시 충돌 최소화
👉 작업 병렬화 가능
4️⃣ 구현 교체가 쉬운 구조를 만들기 위해
Soundable animal = new Dog();
animal.makeSound();
animal = new Cat();
animal.makeSound();
👉 코드 변경 없이 동작 변경 가능
👉 전략 패턴, DI 구조의 핵심
5. 인터페이스와 추상 클래스 비교
| 구분 | 인터페이스 | 추상 클래스 |
|---|---|---|
| 다중 구현 | 가능 | 불가능 |
| 구현 메서드 | default 가능 | 가능 |
| 상태(필드) | 불가능 | 가능 |
| 목적 | 규약 정의 | 상속 기반 확장 |
👉 “행위의 규약”이면 인터페이스
👉 “공통 상태 + 기능”이면 추상 클래스
6. 인터페이스 설계 시 주의할 점
- 하나의 인터페이스에 너무 많은 책임을 담지 말 것
- 불필요한
default메서드 남발 금지 - 작은 역할 단위로 분리 (ISP 원칙)
7. 면접에서 자주 나오는 질문 정리
Q. 인터페이스를 왜 사용하나요?
구현체에 의존하지 않고
결합도를 낮추며 다형성을 활용하기 위해 사용합니다.
Q. 인터페이스와 추상 클래스의 차이는?
인터페이스는 규약 정의,
추상 클래스는 공통 구현과 상태를 포함합니다.
Q. 인터페이스에 필드를 선언할 수 있나요?
가능하지만
public static final상수만 가능합니다.
8. 한 줄 요약
- 인터페이스는 구현 없는 규약
- 다형성과 결합도 감소의 핵심 도구
- 객체지향 설계에서 가장 중요한 개념 중 하나
마무리
인터페이스는
단순한 문법 요소가 아니라
객체지향 설계의 방향을 결정하는 핵심 장치다.
“왜 사용하는지”를 이해하면
DI, 전략 패턴, 테스트 코드 구조까지
자연스럽게 이어서 이해할 수 있다.
'IT > Backend' 카테고리의 다른 글
| [Java] 자바 생성자 (Constructor) (0) | 2018.01.03 |
|---|---|
| [Java] 자바 this, this(), super, super() (0) | 2018.01.02 |
| [Java] 자바 접근제어자 (Access Modifier) (0) | 2017.12.29 |
| [Java] 추상 클래스(Abstract Class)와 추상 메서드(Abstract Method) (0) | 2017.12.29 |
| [Java] 자바(Java) final 키워드 (0) | 2017.12.28 |