📌 인터페이스란?
다른 클래스를 작성할 때 기본이 되는 틀을 제공하면서, 다른 클래스 사이의 중간 매개 역할까지 담당하는 일종의 추상 클래스를 의미합니다.
자바에서 추상 클래스는 추상 메소드뿐만 아니라, 생성자, 필드, 일반 메소드도 포함할 수 있는데,
인터페이스(interface)에서는 오직 추상 메소드와 상수만을 포함할 수 있습니다.
자바의 다형성을 극대화하여 개발코드 수정을 줄이고, 유지보수성을 높이기 위해 인터페이스를 사용합니다.
📌 인터페이스 선언 방법
🧷 접근제어자와 함께 interface 키워드를 사용합니다.
* 문법
public inrerface PhoneInterface { // 인터페이스 선언
// 상수 필드 public static final 생략 가능
public static final int TIMOUT = 10000;
// 추상 메소드 public abstract 생략 가능
public abstract void sendCall();
public abstract void receiveCall();
// default 메소드 public 생략 가능
public default void printLogo() {
}; // default 메소드
📌 인터페이스의 특징
🧷 인터페이스는 interface 키워드를 사용하여 정의합니다.
🧷 인터페이스는 객체 생성이 불가능합니다.
🧷 인터페이스는 상수와 추상메소드로 구성되어있습니다. (자바8 부터 default 메소드와 static 메소드 사용가능)
🧷 인터페이스 안의 모든 상수는 public static final 타입니다. (생략 가능)
🧷 인터페이스 안의 모든 추상메소드는 abstract public 타입니다.
🧷 인터페이스 타입의 레퍼런스 변수 선언 가능합니다.
🧷 인터페이스를 상속받는 클래스는 인터페이스의 모든 추상 메소드를 반드시 구현해야합니다.
🧷 인터페이스는 다른 인터페이스를 extends 키워드로 상속받을 수 있으며, 다중 상속이 가능합니다.
🧷 클래스에서 인터페이스의 구현은 implement 키워드를 사용하여 구현할 인터페이스를 지정후, 추상 메소들르 모드 오버라이드 하여 내용을 완성해야 합니다.
📌 인터페이스의 장점
인터페이스를 사용하면 다중 상속이 가능할 뿐만 아니라 다음과 같은 장점을 가질 수 있습니다.
🧷 기능(메소드)의 구현을 강제함으로써, 대규모 프로젝트 개발 시 일관되고 정형화된 개발을 위한 표준화가 가능합니다.
🧷 클래스의 작성과 인터페이스의 구현을 동시에 진행할 수 있으므로, 개발 시간을 단축할 수 있습니다.
🧷 클래스와 클래스 간의 관계를 인터페이스로 연결하면, 클래스마다 독립적인 프로그래밍이 가능합니다.
🧷 인터페이스를 구현한 클래스들을 하나의 인터페이스 타입으로 다룰 수 있습니다.
비교 | 목적 | 구성 |
---|---|---|
추상 클래스 | 추상 클래스는 서브 클래스에서 필요로 하는 대부분의 기능을 구현하여 두고 서브 클래스가 상속받아 활용할 수 있도록 하되, 서브 클래스에서 구현 할 수밖에 없는 기능을 추상 메소드로 선언하여, 서브 클래스에서 구현하도록 하는 목적(다형성) | - 추상 메소드와 일반 메소드 모드 포함 - 상수, 변수 필드 모드 포함 |
--------------- | ------------------------------------------------------- | --------------------------------------------- |
인터페이스 | 인터페이스는 객체의 기능을 모두 공개한 표준화 문서와 같은것으로, 개발자에게 인터페이스를 상속받는 클래스의 목적에 따라 인터페이스의 모든 추상 메소드를 만들도록 하는 목적(다형성) | - 변수 필드(멤버 변수)는 포함하지 않음 - 상수, 추상 메소드, 일반 메소드, default 메소드, static 매소드 모드 포함 - protected 접근 지정 선언 불가 - 다중 상속 지원 |