본문 바로가기
프로그래밍 언어/JAVA

[JAVA] 인터페이스(Interface)

by E145 2021. 1. 20.
반응형

 

 

인터페이스(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);
    }
}

인터페이스 변수는 final static으로 선언된다.

 


 

인터페이스 구현 예시

 

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 키워드를 이용하여 선언한다. 

   이외의 일반 메소드는 오버라이딩을 선택할 수 있다.

 

 - 인터페이스에 선언된 모든 메소드는 반드시 구현해야 한다.

 

 

 

 

 

반응형

댓글