
🔖 인터페이스란 무엇일까요?
인터페이스는 아까 배운 추상화의 아이디어를 더 강력하게 만든 거예요.
인터페이스를 쉽게 생각하면, 우리가 어떤 물건을 만들거나 행동을 할 때 지켜야 하는 '규칙이 적힌 계약서' 또는 '설계 도면'과 같아요.
✨ 핵심은 '무엇을 할 수 있다'는 능력만 약속하고, '어떻게 할지'는 전혀 신경 쓰지 않는 거예요.
🛴 자전거를 예로 들어볼게요!
여러분은 자전거를 하나 만들려고 해요. 자전거가 갖춰야 할 아주 기본적인 능력은 뭘까요?
- 앞으로 가기
- 멈추기
이것을 인터페이스로 만들면 이렇게 돼요.
| 능력 (인터페이스) | 규칙 (약속) |
| 탈것 | "반드시 앞으로 가기와 멈추기 기능이 있어야 한다!" |
이제 여러분이 이 규칙을 보고 자전거를 만들어요.
- 어떤 사람은 패달을 밟아서 앞으로 가는 자전거를 만들 수 있고,
- 어떤 사람은 모터를 달아서 자동으로 앞으로 가는 자전거를 만들 수 있어요.
어떤 방식으로 만들든, '앞으로 가기'와 '멈추기'라는 약속만 지키면 모두 '탈것'으로 인정받는 거예요!
자바에서 인터페이스는 이렇게 '능력 목록'만 정해주는 약속장소랍니다.
💻 자바 예제로 알아보기
자바 코드를 보면서 인터페이스를 어떻게 만드는지 살펴볼게요.
1. 📜 인터페이스 (약속장소) 만들기
먼저, 우리가 방금 이야기한 '탈것'이라는 규칙이 적힌 인터페이스를 만들어요.
Java
// 인터페이스: 약속이 적힌 계약서
interface Vehicle {
// '앞으로 가는' 능력 (어떻게 갈지는 정하지 않았어요)
void goForward();
// '멈추는' 능력 (어떻게 멈출지는 정하지 않았어요)
void stop();
}
- interface Vehicle: 이게 바로 우리의 '탈것' 약속이에요.
- void goForward(); 와 void stop();: 이것들이 모든 탈것이 반드시 가져야 하는 능력이라고 약속만 해 놓은 거예요. (추상 클래스의 추상 메서드와 비슷하지만, 인터페이스에서는 abstract 키워드를 붙이지 않아도 자동으로 추상 메서드가 된답니다!)
2. 🚲 구체적인 클래스 (약속 지키는 물건) 만들기
이제 이 약속을 지키는 '자전거'를 만들어 볼게요. 인터페이스의 약속을 지킬 때는 implements (이행한다) 라는 말을 써요.
Java
// 자전거 클래스: Vehicle 인터페이스의 약속을 지켜요
class Bicycle implements Vehicle {
// goForward() 약속을 지켜서 구체적으로 만듭니다
@Override
public void goForward() {
System.out.println("자전거는 페달을 밟아 앞으로 나갑니다.");
}
// stop() 약속을 지켜서 구체적으로 만듭니다
@Override
public void stop() {
System.out.println("자전거는 손잡이의 브레이크를 잡아 멈춥니다.");
}
}
- Bicycle은 Vehicle 인터페이스가 약속한 goForward()와 stop() 기능을 자전거만의 방식으로 만들었어요.
3. 🚗 다른 물건도 만들어 보기
같은 Vehicle 약속을 지키는 '자동차'도 만들어 볼게요. 자동차는 자전거와는 다르게 앞으로 가고 멈추는 방법이 다르죠?
Java
// 자동차 클래스: Vehicle 인터페이스의 약속을 지킵니다 (방식은 달라요!)
class Car implements Vehicle {
@Override
public void goForward() {
System.out.println("자동차는 엔진에 연료를 넣어 앞으로 나갑니다.");
}
@Override
public void stop() {
System.out.println("자동차는 발로 브레이크 페달을 밟아 멈춥니다.");
}
}
4. 🚀 실행해 보기
Java
class Main {
public static void main(String[] args) {
// 자전거와 자동차 객체를 만들어요
Bicycle myBike = new Bicycle();
Car myCar = new Car();
// 두 물건 모두 Vehicle이 약속한 goForward()와 stop() 능력을 가지고 있어요!
System.out.println("--- 자전거의 행동 ---");
myBike.goForward();
myBike.stop();
System.out.println("\n--- 자동차의 행동 ---");
myCar.goForward();
myCar.stop();
}
}
결과:
--- 자전거의 행동 ---
자전거는 페달을 밟아 앞으로 나갑니다.
자전거는 손잡이의 브레이크를 잡아 멈춥니다.
--- 자동차의 행동 ---
자동차는 엔진에 연료를 넣어 앞으로 나갑니다.
자동차는 발로 브레이크 페달을 밟아 멈춥니다.
✨ 핵심 정리:
- Vehicle (인터페이스)은 '탈것이 갖춰야 할 능력'만 약속했어요.
- Bicycle과 Car는 그 약속을 지키지만, 각자의 방식으로 능력을 수행했어요.
이렇게 인터페이스는 여러 클래스에게 같은 규칙을 지키게 하면서도, 자유롭게 행동할 방식을 정하게 해주는 멋진 도구랍니다! 👍
'Java_language' 카테고리의 다른 글
| 간단한 자바 성적 관리 프로그램 (0) | 2025.12.05 |
|---|---|
| 💡 예외 처리란 무엇일까요? (0) | 2025.12.05 |
| 추상화란 (0) | 2025.12.03 |
| 오버라이딩 (Overriding) (0) | 2025.12.03 |
| 다형성 (0) | 2025.12.03 |