Study/java

[Java] 인터페이스(Interface) 특징, 장단점, 사용법 및 예제

 

자바에는 인터페이스(interface)가 있습니다.

인터페이스란 무엇인지 아래와 같이 정의하고 있습니다.

인터페이스는 클래스들이 구현해야 하는 동작을 지정하는데 사용되는 추상 자료형이다.

 

그래서 일반적으로 인터페이스에는 메소드만 선언되어있고, 해당 메소드의 구현은 인터페이스를 구현한 클래스에서 진행하게 됩니다.

 

특징

1. 추상 메서드만으로 구성되어 있습니다.

그래서 인터페이스를 구현한 클래스는 인터페이스에 있는 모든 메소드를 구현해야 합니다.

(Java 8버전부터는 상수와 default 메소드, static 메소드, 추상 메서드도 사용할 수 있게 되었습니다)

 

2. 다중 상속이 가능합니다.

한 클래스에 여러 인터페이스를 상속받으면 여러 기능을 수행할 수 있는 클래스로 만들 수 있습니다.

추상클래스나 일반 클래스는 다중 상속을 지원하지 않습니다.

 

장점

1. 다형성을 구현할 수 있습니다.

다형성이란 한 객체가 다양한 모양을 가질 수 있는 성질을 의미합니다.

인터페이스는 구현하는 객체에 따라 다양한 형태로 구현될 수 있습니다.

인터페이스를 통해 구현한 클래스들은 인터페이스 타입으로 참조할 수 있습니다.

 

2. 추상화를 구현할 수 있습니다.

프로그래밍에서 추상화란 공통되는 속성이나 기능을 묶어서 정의하는 것을 의미합니다.

각 객체에서 공통된 동작을 묶어서 인터페이스로 만들면 사용자에게 세부적인 구현 코드는 숨기고, 필요한 기능만 제공할 수 있게 됩니다.

그래서 직관적이고 깨끗하게 코드를 작성할 수 있습니다.

 

3. 객체 간 의존성을 줄일 수 있습니다.

클래스 대신에 인터페이스에 의존하게 되면 클래스를 수정하더라도 의존하고 있는 객체는 수정하지 않아도 됩니다.

예를 들어, 사람(인터페이스)이 자동차 클래스에 탑승한다고 할 때 사람 인터페이스의 구현 객체가 김씨든 이씨든 자동차 클래스와는 상관이 없습니다.

만약에 김씨가 차량에 탑승한다고 정의했을 때, 김씨 말고 이씨도 탑승할 수 있게 하려면 자동차 클래스의 내용을 수정해야 합니다.

 

 

 

 

단점

1. 인터페이스의 정의된 메소드를 모두 구현해야 합니다.

인터페이스를 구현한 클래스는 인터페이스의 메소드를 모두 구현해야 합니다.

만약 인터페이스의 추상화가 제대로 이루어지지 않은 경우엔 불필요한 메소드까지 구현해야할 수 있습니다.

 

2. 변경이 어렵습니다.

만약, 인터페이스를 많은 클래스에서 사용하고 있는 상태에서 인터페이스에 메소드가 추가된다면 해당 인터페이스를 사용하는 모든 클래스를 수정해야 합니다.

 

사용법 및 예제

인터페이스의 사용법은 다음과 같습니다.

public interface Walkable {
    void walk();
}

Walkable 인터페이스에 walk 메소드를 선언하였습니다.

이 인터페이스를 구현한 객체들은 모두 걸을 수 있게 됩니다.

 

이렇게 만들어낸 인터페이스는 다음과 같이 사용하면 됩니다.

public class Human implements Walkable {
    @Override
    public void walk() {
        System.out.println("Human walk");
    }
}

public class Apple implements Walkable {
    @Override
    public void walk() {
        System.out.println("Apple walk");
    }
}

 

Human 객체와 Apple 객체에 Walkable 인터페이스를 구현하였습니다.

걸어다닐 수 있는 사람과 걸어다닐 수 있는 사과 객체가 생성되었습니다.

 

출처

인터페이스 정의

프로그래밍에서의 추상화 정의