본문 바로가기
쿤즈 Dev/Java

[Java] 인터페이스 Interface

by Koonz:) 2023. 9. 17.
728x90

자바(Java)에서 인터페이스(Interface)는 추상화를 구현하는 중요한 개념 중 하나이다. 추상 클래스와 비슷하지만 몇 가지 차이점이 있다.

이번 포스팅에서는 인터페이스에 대해서 알아보자.


인터페이스 Interface

인터페이스는 클래스가 특정한 동작을 수행하기 위해 구현해야 하는 메서드들의 목록을 정의한다. 이러한 메서드는 인터페이스를 구현하는 클래스에서 반드시 구현되어야 한다. 자바에서 클래스는 다중 상속을 지원하지 않지만, 여러 인터페이스를 구현하는 것은 가능하다.

 

인터페이스를 사용하면 클래스 간의 느슨한 결합을 유지하면서 코드의 유연성을 높일 수 있다.

인터페이스를 정의하는 방법은 다음과 같다.

interface Vehicle {
    // 추상 메서드(메서드 시그니처만 정의되고 구현은 하지 않음)
    void accelerate();
    
    // 상수 (public static final 키워드 생략 가능)
    String MADE_IN = "KOR";
}

위 예제에서 'Vehicle'는 한 개의 추상 메서드('accelerate')와 하나의 상수('MADE_IN')를 정의하고 있다. 인터페이스 내의 메서드는 메서드 시그니처만을 포함하여 구현부는 제공되지 않는다.

 

이제 인터페이스를 구현하는 클래스를 작성해 보자.

public class Car implements Vehicle {
    @Override
    public void accelerate() {
        // 구현
    }
}

인터페이스를 구현하기 위해서는 'implements' 키워드를 이용해서 인터페이스를 받아오고 구현해야 한다. 'Vehicle'를 implements 하면 인터페이스에서 가지고 있던 한 개의 메서드를 오버라이드 해야 한다. 이유는 모두 추상 메서드로 만들어져 있기 때문이다.

 

인터페이스를 사용하면 다형성을 구현하고, 코드 재사용성을 높이며, 클래스 간의 강한 결합을 피할 수 있다.


자바 8에서 추가된 내용

자바8 버전부터는 인터페이스에서 default 메서드와 static 메서드를 정의할 수 있는 기능이 추가되었다. 즉, 구현 클래스에서 해당 메서드를 재정의 하지 않아도 된다. 예를 들어서 보자.

interface Vehicle {
    // 추상 메서드(메서드 시그니처만 정의되고 구현은 하지 않음)
    void accelerate();

    default void start() {
        System.out.println("Vehicle 출발!");
    }
    
    // 상수 (public static final 키워드 생략 가능)
    String MADE_IN = "KOR";
}

public class Car implements Vehicle {
    @Override
    public void accelerate() {
        // 구현
    }
}

public class CarMain {
    public static void main(String[] args) {
        Car car = new Car();
        car.start(); // 인터페이스의 메서드 실행
        car.accelerate(); // Car 클래스의 메서드 실행
    }
}

이번 포스팅에서는 인터페이스에 대해서 알아보았다. 다음 포스팅에서는 인터페이스와 추상 클래스의 차이점에 대해서 알아보자.

댓글