IT/Backend

[Java] Java 인터페이스(Interface) 완벽 정리 – 왜 사용하는지 예제로 설명

바다, 2017. 12. 29. 16:32
반응형

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, 전략 패턴, 테스트 코드 구조까지
자연스럽게 이어서 이해할 수 있다.

반응형