카테고리 없음

인터페이스와 선택 전략

승주우에요 2026. 1. 7. 09:11

1. 인터페이스란?

인터페이스는 객체가 무엇을 할 수 있는지에 대한 규약이다. 구현은 포함하지 않고, 행위만 정의한다. 즉, 어떻게가 아닌 무엇에에 집중한다.

interface Flyable {
    void fly();
}

인터페이스는 구현이 아니라 약속이다.

 

2. 인터페이스의 기본 특징

다중 구현 가능

클래스는 하나의 클래스만 상속할 수 있지만, 인터페이스는 여러 개를 동시에 구현할 수 있다.

class Bird implements Flyable, Runnable {
    public void fly() {}
    public void run() {}
}

기능 단위로 조합 가능

상속의 한계를 보완

 

메서드의 성격

인터페이스의 메서드는 기본적으로 public, abstract 키워드가 자동으로 적용된다.

interface Pay {
    void pay(); // public abstract가 생략된 것임
}

 

필드의 성격

인터페이스의 필드는 모두 public, static, final 즉, 상수만 가질 수 있다.

interface Status {
    int OK = 200; // public static final
}

 

default 메서드

구현을 가진 메서드를 정의할 수 있다

  • 기존 클래스에 영향을 주지 않기 위해
  • 다형성 적용 가능
interface Logger {
    default void log() {
        System.out.println("log");
    }
}

 

3. 추상 클래스 vs 인터페이스

둘 다 추상화를 위한 도구지만, 의도가 다르다.

공통점

  • 객체 생성 불가
  • 하위 클래스에서 구현 필요
  • 다형성 적용 가능

차이점 

구분 추상 클래스 인터페이스
메서드 추상 + 일반  기본적으로 추상
필드 인스턴스 필드 가능  상수만 가능
목적 공통 구현 제공 행위 규약 정리
상속/구현 단일 상속 다중 구현

 

4. 선택 전략

추상 클래스 

  • 공통 필드가 필요할 때
  • 공통 구현 코드가 많을 때
  • 상속 구조가 명확할 때
abstract class Animal {
    int age;

    abstract void sound();
}

 

인터페이스

  • 행위 중심 추상화가 필요할 때
  • 다중 구현이 필요할 때
  • 결합도를 낮추고 싶을 때
interface Pay {
    void pay();
}

 

5. 정리

  • 인터페이스는 할 수 있다의 계약이다
  • 다중 구현이 가능하다
  • 필드는 상수만 가질 수 있다
  • default 메서드는 예외적 도구임
  • 추상 클래스와 인터페이스는 역할이 다름
  • 선택 기준은 상태 vs 행위