인터페이스(Interface)
인터페이스는 실행활에서나 아니면 프로그래밍을 접하다 보면 자주 듣는 용어이다.
일반적인 사람은 기계의 작동 원리나 방식을 알지 못하면 사용을 못한다. 예를 들면 우리가 자판기를 사용한다고 했을 때 우리가 흔히 생각하는 자판기 외부가 없고 내부 기계만 있다면 어떻게 사용하는지 모를 것이다.
하지만 우리는 자판기를 사용할 때 자판기 외부에 있는 버튼을 누르고, 결제하고, 해당 상품을 받는다. 자판기 외부를 사용하면서 우리는 내부가 어떻게 동작하는지 고민하거나 신경쓸 필요가 없어진다.
자판기 외부를 인터페이스라고 이해하면 쉽다.
이제 인터페이스를 프로그래밍적으로 이해해보면 인터페이스는 추상 메서드의 집합이다.
구현된 것이 전혀 없으므로 모든 멤버가 public이다. (구현을 해야되기 때문에 메서드 접근이 가능해야한다.)
인터페이스 구현
인터페이스의 구현은 인터페이스에 정의된 추상 메서드를 완성하는 것이다.
인터페이스에서 받아온 추상 메서드를 모두 구현하지 않으면 해당 클래스 앞에 abstract 제어자를 붙여야 한다. (추상 클래스 유지)
인터페이스를 구현할 때 implements 키워드를 사용해서 구현해준다.
인터페이스를 이용한 다형성
인터페이스도 구현 클래스의 조상이 될 수 있다. (충돌이 없기 때문에)
인터페이스 타입 매개변수는 인터페이스를 구현한 클래스의 객체만 가능하다.
이번에는 자판기를 예시로 들어보면 Beverage 클래스와 Snack 클래스는 모두 인터페이스를 구현한 상태이다. click 기능을 사용하면
해당 메서드와 같이 인터페이스를 매개변수로 넘겨줄 수 있다. 왜냐하면 Beverage와 Snack 클래스 모두 Clickable 인터페이스를 구현한 클래스이기 때문이다.
인터페이스를 메서드의 리턴 타입으로 지정할 수 있다.
인터페이스를 메서드의 리턴 타입으로 지정하면 인터페이스를 구현한 클래스의 인스턴스를 반환한다.
Clickable 인터페이스를 리턴 타입으로 사용하는데 해당 인터페이스를 구현한 클래스의 인스턴스를 반환하는 것을 보면 다형성을 통한 형변환이 일어난다는 것을 알 수 있다.
인터페이스의 장점
- 두 대상(객체) 간의 연결, 대화, 소통을 돕는 중간 역할을 한다.
- 선언과 구현을 분리시킬 수 있게 한다.
- 개발시간을 단축할 수 있다.
- 변결에 유리하고 유연한 설계가 가능해진다.
- 표준화가 가능하다.
표준화가 가능하다는 것은 예를 들면 JDBC가 있다. 프로그램을 만들면 여러 가지 DB 서버를 사용하게 되는데 인터페이스가 없으면 DB 서버가 바뀔 때 변경을 해줘야한다. 하지만 JDBC만 있으면 DB의 종류와 상관없이 변경을 하지 않아도 사용할 수 있다.
- 서로 관계없는 클래스들 간에 관계를 맺어줄 수 있다.
추상 클래스와 인터페이스의 차이
인터페이스에서 모든 메서드는 항상 public abstract이기 때문에 인터페이스에서 public abstract 키워드를 생략할 수 있다.
상수도 항상 public static final이기 때문에 생략이 가능하다.
추상 클래스가 단일 상속만 가능한 이유는 만약 다중 상속이 가능하다면 추상 메서드 외에 일반 메서드의 선언부가 같은데 구현부가 다르면 충돌이 발생하기 때문에 단일 상속만 가능하다.
반대로 인터페이스는 추상 메서드만을 가지고 있어 구현부가 없기 때문에 충돌 문제가 발생하지 않아 다중 상속이 가능하다.
'자바' 카테고리의 다른 글
Java - 변수 (1) | 2023.11.01 |
---|---|
객체 지향 프로그래밍 - 추상화 (0) | 2023.08.18 |
객체 지향 프로그래밍 - 다형성 (0) | 2023.08.17 |
객체 지향 프로그래밍 - 제어자 (0) | 2023.08.16 |
객체 지향 프로그래밍 - Super (0) | 2023.08.15 |