본문 바로가기
Java_language

인터페이스란 무엇일까요?

by 헬로제이콥 2025. 12. 3.

🔖 인터페이스란 무엇일까요?

인터페이스는 아까 배운 추상화의 아이디어를 더 강력하게 만든 거예요.

인터페이스를 쉽게 생각하면, 우리가 어떤 물건을 만들거나 행동을 할 때 지켜야 하는 '규칙이 적힌 계약서' 또는 '설계 도면'과 같아요.

✨ 핵심은 '무엇을 할 수 있다'는 능력만 약속하고, '어떻게 할지'는 전혀 신경 쓰지 않는 거예요.

🛴 자전거를 예로 들어볼게요!

여러분은 자전거를 하나 만들려고 해요. 자전거가 갖춰야 할 아주 기본적인 능력은 뭘까요?

  1. 앞으로 가기
  2. 멈추기

이것을 인터페이스로 만들면 이렇게 돼요.

능력 (인터페이스) 규칙 (약속)
탈것 "반드시 앞으로 가기멈추기 기능이 있어야 한다!"

이제 여러분이 이 규칙을 보고 자전거를 만들어요.

  • 어떤 사람은 패달을 밟아서 앞으로 가는 자전거를 만들 수 있고,
  • 어떤 사람은 모터를 달아서 자동으로 앞으로 가는 자전거를 만들 수 있어요.

어떤 방식으로 만들든, '앞으로 가기'와 '멈추기'라는 약속만 지키면 모두 '탈것'으로 인정받는 거예요!

자바에서 인터페이스는 이렇게 '능력 목록'만 정해주는 약속장소랍니다.


💻 자바 예제로 알아보기

자바 코드를 보면서 인터페이스를 어떻게 만드는지 살펴볼게요.

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("자전거는 손잡이의 브레이크를 잡아 멈춥니다.");
  }
}
  • BicycleVehicle 인터페이스가 약속한 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 (인터페이스)은 '탈것이 갖춰야 할 능력'만 약속했어요.
  • BicycleCar는 그 약속을 지키지만, 각자의 방식으로 능력을 수행했어요.

이렇게 인터페이스는 여러 클래스에게 같은 규칙을 지키게 하면서도, 자유롭게 행동할 방식을 정하게 해주는 멋진 도구랍니다! 👍

'Java_language' 카테고리의 다른 글

간단한 자바 성적 관리 프로그램  (0) 2025.12.05
💡 예외 처리란 무엇일까요?  (0) 2025.12.05
추상화란  (0) 2025.12.03
오버라이딩 (Overriding)  (0) 2025.12.03
다형성  (0) 2025.12.03