JAVA/포스팅

자바 인터페이스의 이해

짜집퍼박사(짜박) 2023. 11. 13. 00:21

인터페이스(Interface)는 자바에서 다양한 클래스들이 특정 메서드들을 구현하도록 강제하는 역할을 하는 추상형(abstract type)입니다.

 

1. 인터페이스의 정의

인터페이스는 interface 키워드를 사용하여 정의됩니다. 인터페이스 내에는 추상 메서드, 상수, 디폴트 메서드, 정적 메서드가 포함될 수 있습니다.

interface MyInterface {
    // 추상 메서드
    void myMethod();

    // 상수 (public static final이 생략됨)
    int MY_CONSTANT = 42;

    // 디폴트 메서드 (Java 8 이후)
    default void defaultMethod() {
        // 구현
    }

    // 정적 메서드 (Java 8 이후)
    static void staticMethod() {
        // 구현
    }
}

 

2. 인터페이스의 구현

클래스에서 인터페이스를 구현하려면 implements 키워드를 사용합니다. 클래스는 여러 개의 인터페이스를 동시에 구현할 수 있습니다.

class MyClass implements MyInterface {
    public void myMethod() {
        // 구현
    }
}

 

3. 다중 상속

자바에서는 클래스는 하나의 클래스만을 상속할 수 있지만, 인터페이스는 다중 상속이 가능합니다. 클래스가 여러 인터페이스를 구현할 수 있습니다.

interface Interface1 {
    void method1();
}

interface Interface2 {
    void method2();
}

class MyClass implements Interface1, Interface2 {
    public void method1() {
        // 구현
    }

    public void method2() {
        // 구현
    }
}

 

4. 추상 메서드

인터페이스의 메서드는 기본적으로 추상 메서드이며, 본체를 가지지 않습니다. 하위 클래스에서 반드시 이를 구현해야 합니다.

interface MyInterface {
    void myMethod();
}

class MyClass implements MyInterface {
    public void myMethod() {
        // 구현
    }
}

 

5. 상수

인터페이스 내에서 선언된 변수는 자동으로 public, static, final 속성을 갖습니다. 이는 상수로 사용됩니다.

interface MyInterface {
    int MY_CONSTANT = 42;
}

 

6. 디폴트 메서드와 정적 메서드

Java 8부터는 인터페이스에 디폴트 메서드와 정적 메서드를 정의할 수 있게 되었습니다.

- 디폴트 메서드 : default 키워드를 사용하여 메서드를 구현할 수 있습니다. 구현하지 않아도 되며, 하위 클래스에서 재정의할 수 있습니다.
- 정적 메서드 : static 키워드를 사용하여 정적 메서드를 정의할 수 있습니다. 인터페이스를 통해 직접 호출할 수 있습니다.

interface MyInterface {
    default void defaultMethod() {
        // 구현
    }

    static void staticMethod() {
        // 구현
    }
}

 

7. 함수형 인터페이스

Java 8부터는 람다 표현식을 지원하기 위해 하나의 추상 메서드만을 갖는 인터페이스를 함수형 인터페이스(Functional Interface)라고 합니다. @FunctionalInterface 애노테이션을 통해 확인할 수 있습니다.

@FunctionalInterface
interface MyFunctionalInterface {
    void myMethod();
}

 

8. 인터페이스의 활용

인터페이스는 다형성을 지원하고, 클래스 간의 결합도를 낮춰서 유연하고 확장 가능한 코드를 작성하는 데 기여합니다. 코드의 재사용성을 증가시키며, 각 클래스가 특정 행동을 제공하기 위해 어떤 메서드를 구현해야 하는지 명시적으로 정의합니다.

interface Eater {
    void eat();
}

class Person implements Eater {
    public void eat() {
        // 구현
    }
}

class Animal implements Eater {
    public void eat() {
        // 구현
    }
}

자바 인터페이스는 자바의 객체지향 프로그래밍에서 중요한 역할을 하며, 유연하고 확장 가능한 코드를 작성하는 데 큰 도움을 줍니다. 추상 클래스와 비교하면서 해당 개념을 더 잘 이해할 수 있습니다.

 

With ChatGPT