Java] Interface

  • 서비스 목록으로 교량 역할
  • 서로 다른 구조에서 처리를 위해 표준화

Abstract와 Interface

완벽한 Abstract 클래스는 Interface와 같다.

1
2
3
4
5
public abstract class PersonalNumberStorage {

public abstract void addPersonalInfo(String name, String perNum);
public abstract String searchName(String perNum);
}
1
2
3
4
5
public interface PersonalNumberStorage {
// public abstract를 쓰지 않아도 컴파일러가 붙여주지만, 명시성을 위해 작성
public abstract void addPersonalInfo(String name, String perNum);
String searchName(String perNum);
}
  • 인터페이스 내에 존재하는 변수는 무조건 public static final로 선언된다.
  • 인터페이스 내에 존재하는 메서드는 무조건 public abstract로 선언된다.

Interface 변수

인터페이스 변수가 public static final로 선언되다보니 이전에는 상수를 모아두는 방법으로도 사용되었다. Java5부터 열거형(enum)이 제공되면서 그 역할을 대신하기였다. 열거형은 자바에 익숙해지고 나서 접근하는 것이 좋다.

Interface의 상속

Inteface의 상속은 Implements를 이용하여 상속받으며 상속이라기보다는 구현이라고 표현한다.

Interface끼리의 상속에서는 Implements를 사용하는 것이 아닌 extends를 이용한다.

인터페이스의 쓰임

인터페이스는 서비스를 구현할 때 명세서 역할을 한다고 보면 된다.

예로 JDBC의 구현을 들어보자.

JDBC(Java Database Connectivity)는 데이터베이스와 자바를 연결해주는 라이브러리다.

JDBC에 연결된 Database(Oracle, MySQL 등…) 이러한 연결과 기능들을 Java에서 다 해주기엔 만만치 않았을 것이다. 본래 기능을 가지고 있는 각 회사에서 기능을 구현해서 라이브러리화해서 쓸 수 있게 하는게 맞는 것이다.

그런데 이 기능을 구현함에 있어서 제 각각 다를 수 있으니 Interface를 통해 규격화해서 구현하게 하는 것이 옳다.

이러한 일을 할 때 인터페이스를 사용한다.