[java] 인터페이스

인터페이스는 자바 프로그래밍에서 중요한 개념 중 하나입니다. 인터페이스는 클래스와 클래스 사이에서 다양한 객체 간의 통신을 돕는 역할을 합니다. 이 포스트에서는 자바에서 인터페이스가 무엇인지, 왜 사용되는지, 그리고 어떻게 사용하는지에 대해 알아보겠습니다.

인터페이스란?

인터페이스는 클래스를 구현하기 위한 일종의 계약(contract)입니다. 인터페이스는 추상 메서드, 상수, 디폴트 메서드, 정적 메서드를 포함할 수 있습니다. 추상 메서드는 구현이 되지 않은 메서드이며, 이를 구현하는 클래스는 반드시 추상 메서드를 오버라이딩해야 합니다. 상수는 변경할 수 없는 값으로, 인터페이스를 구현하는 클래스에서 동일한 값을 사용해야 합니다. 디폴트 메서드는 인터페이스에서 기본 구현을 제공하며, 구현 클래스에서 오버라이딩할 수 있습니다. 정적 메서드는 인스턴스 생성 없이 인터페이스의 메서드를 호출할 수 있습니다.

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

    // 상수
    int MAX_VALUE = 10;

    // 디폴트 메서드
    default void myDefaultMethod() {
        System.out.println("Default Method");
    }

    // 정적 메서드
    static void myStaticMethod() {
        System.out.println("Static Method");
    }
}

인터페이스의 사용이유

인터페이스는 코드의 유연성과 재사용성을 높여주는 장점을 가지고 있습니다. 인터페이스를 사용하면 코드의 결합도를 낮출 수 있기 때문에, 변경이 발생하더라도 영향을 최소화할 수 있습니다. 또한, 다중 상속이 불가능한 자바에서 인터페이스를 사용해 클래스가 여러 개의 인터페이스를 동시에 구현할 수 있습니다.

인터페이스의 사용 예시는 다양합니다. 예를 들어, 자동차 인터페이스를 구현하는 클래스는 모두 기본적으로 주행할 수 있는 기능을 가지게 되고, 각 클래스에서는 자신만의 특징을 추가로 구현할 수 있습니다. 이는 유연한 코드 구조를 만들어줄 뿐만 아니라, 코드의 재사용성도 높여줍니다.

인터페이스의 구현과 사용

인터페이스를 구현하는 클래스는 implements 키워드를 사용하여 인터페이스를 명시해야 합니다. 구현 클래스에서는 모든 추상 메서드를 오버라이딩해야 하며, 상수와 디폴트 메서드는 오버라이딩할 필요가 없습니다. 인터페이스는 인스턴스로 직접 생성할 수 없고, 인터페이스 변수를 선언하여 구현 클래스의 인스턴스를 참조할 수 있습니다.

public class MyClass implements MyInterface {
    @Override
    public void myMethod() {
        System.out.println("Implemented Method");
    }
}

public class Main {
    public static void main(String[] args) {
        MyInterface myInterface = new MyClass();
        myInterface.myMethod();
        myInterface.myDefaultMethod();
        MyInterface.myStaticMethod();
    }
}

위의 예시에서 MyClass 클래스는 MyInterface 인터페이스를 구현하고 있습니다. MyInterface의 인스턴스를 생성하기 위해 MyClass의 객체를 사용합니다. 이때 myMethod() 메서드는 반드시 구현되어야 하며, myDefaultMethod() 메서드는 기본 구현을 사용할 수 있습니다. 또한, myStaticMethod() 메서드는 인터페이스의 이름으로 직접 접근 가능합니다.

결론

인터페이스는 자바 프로그래밍에서 중요한 개념 중 하나입니다. 인터페이스를 사용하면 코드의 유연성과 재사용성을 높일 수 있으며, 다른 클래스 간의 통신을 도와줍니다. 인터페이스를 구현하고 사용하는 방법에 대해 알아보았는데요, 이를 잘 활용하여 유지보수 용이하고 확장 가능한 코드를 작성할 수 있습니다.

참고 자료: