인터페이스(Interface)
인터페이스(Interface)의 특징
- 100% 순수한 추상 클래스와 비슷하다.
- 추상 메소드들로만 이루어진 모임.
- 다중 상속을 지원한다.
- 구현해야할 껍데기를 만들어 놓는것과 비슷하다.
인터페이스 작성 방법
- class 대신 interface 키워드를 사용한다.
- extends 대신 implements 키워드를 사용한다.
- 인터페이스를 상속 받은 클래스는 인터페이스에 있는 모든 추상 메소드를 구현해야 한다.
- 인터페이스 끼리는 상속하고, 상속 받을 수 있다. 이때는 extends 키워드를 이용한다.
클래스끼리의 상속과 다르게 인터페이스 상속은 다중 상속이 가능하다.
- 추상 메소드는 abstract를 생략할 수 있다.
- 추상 메소드의 접근 제한자를 생략하는 경우 다른 메소드와 달리 default가 아니라 public으로 선언된다.
- 추상 메소드는 인스턴스 변수를 가질 수 없다. 하지만, final static을 이용하여 변수를 선언할 수 있다.
생략하는 경우, 자동으로 final static으로 선언된다.
public interface animal{
void feed();
void bark();
}
// animal 인스턴스를 상속 받았지만, 구현하지 않는 경우
class dog implements animal{
String name;
dog() {
name="강아지";
}
}
public class start {
public static void main(String[] args) {
parent p = new child();
System.out.println(parent.test11);
}
}
interface parent{
int test11=36;
void test();
}
class child implements parent{
public void test(){
System.out.println(test11);
}
}
인터페이스 구현 예시
import java.util.*;
public class Main {
public static void main(String[] args) {
dog d = new dog();
d.feed();
d.bark();
}
}
public interface animal{
void feed();
void bark();
}
class dog implements animal{
String name;
dog() {
name="강아지";
}
public void feed() {
System.out.println(name+"에게 강아지용 먹이 주기.");
}
public void bark() {
System.out.println(name+" : 짖기.");
}
}
default 메소드
- 자바8에서는 인터페이스에 default 메소드를 구현할 수 있도록 지원한다.
- 인터페이스 안에 default 키워드를 이용하여 선언하고, 기존의 추상 함수와 다르게 구현이 되어 있다.
- 인터페이스를 구현하는 클래스는 default 메소드 역시 오버라이딩 할 수 있다.
public class start {
public static void main(String[] args) {
defaultTest dt = new test();
dt.test();
}
}
interface defaultTest{
default void test(){
System.out.println("디폴트 메소드 테스트");
}
}
class test implements defaultTest{
;
}
추상 클래스 vs 인터페이스
공통점
- 추상 클래스와 인터페이스 모두 인스턴스 자신의 생성이 불가능하다.
- 추상 클래스와 인터페이스 모두 반드시 구현해야 하는 메소드가 존재한다.
차이점
- 추상 클래스는 extends 키워드를 사용하여 일반 클래스 처럼 상속 한다. 즉, 단일 상속만 지원한다.
- 인터페이스는 implements 키워드를 사용하여 다중 상속을 지원한다.
- 추상 클래스는 반드시 구현해야하는 메소드의 경우 abstract 키워드를 이용하여 선언한다.
이외의 일반 메소드는 오버라이딩을 선택할 수 있다.
- 인터페이스에 선언된 모든 메소드는 반드시 구현해야 한다.
'프로그래밍 언어 > JAVA' 카테고리의 다른 글
[JAVA] 스레드(Thread) (0) | 2021.01.20 |
---|---|
[JAVA] 예외 처리 (0) | 2021.01.20 |
[JAVA] 추상 클래스(Abstract Class) & 추상 메소드(Abstract Method) (0) | 2021.01.20 |
[JAVA] 오버라이딩(Overriding) 과 오버로딩(Overloading) // 다형성 (0) | 2021.01.20 |
[JAVA] 상속(Inheritance) (0) | 2021.01.20 |
댓글