어제 오늘 내일

[Java] 인터페이스(interface) 사용법 및 예제 본문

IT/Java

[Java] 인터페이스(interface) 사용법 및 예제

hi.anna 2025. 12. 23. 07:52

 

Java에서 interface(인터페이스)는 클래스를 설계할 때 규칙(기능의 명세)을 정의하는 역할을 합니다.
인터페이스는 객체가 “무엇을 할 수 있는지”를 정의하며, 실제 구현은 이를 구현(implements)한 클래스가 담당하게 됩니다.
인터페이스는 다형성과 유연한 구조 설계에 핵심적으로 사용됩니다.

 

1. interface란?

인터페이스는 추상 메서드들의 집합으로 볼 수 있습니다.
(단, Java 8 이후에는 default 메서드와 static 메서드도 포함 가능)

특징

  • 생성자 없음
  • 객체 생성 불가
  • 모든 메서드는 기본적으로 추상(abstract)
  • 다중 구현(implements)이 가능
  • 클래스가 수행해야 할 기능을 명확히 강제

형식:

interface 인터페이스명 {
    // 추상 메서드
    void method();
}

 

2. 인터페이스 구현(implements)

클래스는 implements 키워드를 사용해 인터페이스를 구현할 수 있습니다.

interface Animal {
    void sound();
}

class Dog implements Animal {
    @Override
    public void sound() {
        System.out.println("멍멍");
    }
}

설명

  • Dog는 Animal 인터페이스의 sound() 메서드를 반드시 구현해야 함

 

3. 인터페이스 활용 예제

예제 1: 여러 클래스에서 같은 규칙 적용

interface Printable {
    void print();
}

class Document implements Printable {
    @Override
    public void print() {
        System.out.println("문서 출력");
    }
}

class Photo implements Printable {
    @Override
    public void print() {
        System.out.println("사진 출력");
    }
}

이처럼 인터페이스를 사용하면 다양한 클래스가 같은 규칙을 공유하게 되어 일관성 있는 구조를 만들 수 있습니다.

 

4. 인터페이스 다형성

인터페이스 타입으로 객체를 참조할 수 있으며, 이는 다형성을 구현하는 핵심입니다.

Printable p = new Document();
p.print(); // 문서 출력

p = new Photo();
p.print(); // 사진 출력

설명

  • Printable 타입 하나로 다양한 객체를 다룰 수 있음

 

5. 인터페이스 상속

인터페이스는 또 다른 인터페이스를 상속할 수 있습니다.
여러 인터페이스를 동시에 상속하는 것도 가능(다중 상속).

interface A {
    void a();
}

interface B {
    void b();
}

interface C extends A, B {
    void c();
}

설명

  • C 인터페이스는 A, B의 기능도 함께 가져감

 

6. default 메서드 (Java 8+)

인터페이스에서도 **구현된 메서드(default method)**를 가질 수 있습니다.

interface MyInterface {
    default void hello() {
        System.out.println("Hello from interface");
    }
}

특징

  • 구현체에서 선택적으로 오버라이딩 가능
  • 인터페이스 변경 시 기존 코드 깨짐을 방지

 

7. static 메서드 (Java 8+)

인터페이스 안에 static 메서드도 정의할 수 있습니다.

interface Util {
    static void info() {
        System.out.println("인터페이스 static 메서드");
    }
}

Util.info();

특징

  • 인터페이스명으로 직접 호출
  • 구현 클래스에서는 사용할 수 없음

 

8. 전체 예제

interface Shape {
    void draw();
}

class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("원을 그립니다");
    }
}

class Square implements Shape {
    @Override
    public void draw() {
        System.out.println("사각형을 그립니다");
    }
}

public class Main {
    public static void main(String[] args) {
        Shape s1 = new Circle();
        Shape s2 = new Square();

        s1.draw();
        s2.draw();
    }
}

출력

원을 그립니다
사각형을 그립니다

 

9. 정리

  • 인터페이스는 기능을 정의하는 규칙(명세)
  • 클래스는 implements로 인터페이스를 구현
  • 여러 클래스에 동일한 기능을 강제할 수 있음
  • 다형성 지원 → 인터페이스 타입으로 다양한 객체 처리 가능
  • Java 8 이후에는 default, static 메서드도 지원

 

반응형
Comments