본문 바로가기

Java

JAVA 인터페이스

JAVA 인터페이스를 공부하기 전에 클래스와 클래스의 상속에 대해 알고 공부하는 것이 좋다.

하지만 인터페이스의 개념이 급하게 필요한 사람들을 위해 클래스와 클래스의 상속에 대해서 가볍게 알고 가자.

 

클래스란

  기능(메소드)과 속성(필드)으로 이루어진 객체를 만들기 위한 설계도라고 볼 수 있다.

 

클래스 상속이란

  클래스의 상속이란 기존에 존재하는 클래스의 필드와 메소드를 물려받아 새로운 클래스를 만드는 것을 말한다.

  자세한 내용은 JAVA 클래스 상속 링크를 통해볼 수 있다.

 

 


1. 인터페이스란 

  클래스가 객체를 만들기 위한 설계도라면, 인터페이스는 클래스를 만들기 위한 설계도라고 생각한다.

  인터페이스는 결국 클래스를 생성하는 문법이기 때문이다.

  그 밖에 '리모콘 설계도', '밑그림만 있는 설계도'라고 비유하는 사람도 있다.

 

  인터페이스로 객체를 만들기 위해선 아래와 같은 순서를 거쳐야 한다.

  인터페이스 선언  ->  인터페이스를 구현하는 클래스 선언  ->  클래스를 생성하여 객체 생성

 

 

 

2. 인터페이스의 구조와 예

  class와 같이 첫 부분에 interface라는 키워드로 선언한다.

  인터페이스 안에 모든 변수는 public static final 이고, 모든 메소드는 public abstract이다.

// 자바 버전 8 이후 인터페이스에서 디폴트 메소드와 정적 메소드를 사용할 수 있게 되었다. 5. 번 참고

  아래와 같이 선언하지 않고 제어자(ex) public) 생략이 가능하다.

 

인터페이스 선언 구조 

interface 인터페이스 이름 {
    public static final 상수형 변수 = 값;  		//public static final은 생략이 가능하다.
    public abstract 반환형 메서드 이름 (매개 변수) //public abstract는 생략이 가능하다.
}

 

인터페이스 선언 예

interface Player {
    void play();  //public abstract 접근자가 생략되어 있다.
    void stop();
}

 

 

 

3. 인터페이스의 구현과 예

  -  클래스를 선언할 때 implements(구현한다.) 키워드로 Player 인터페이스를 구현할 수 있습니다.

  -  추상 클래스가 아닌 기본 클래스에서는 인터페이스에 메소드를 모두 구현해야 합니다.

  다른 클래스를 상속하면서 인터페이스를 구현할 수 있습니다.

  -  인터페이스를 구현하는 클래스에서는 메소드에 public 수식자를 사용해서 구현해야 합니다. //인터페이스가 public이기 때문

 

인터페이스 구현 구조

class 클래스 이름 implements 인터페이스 이름 {
    public void play(){
    	//메소드 정의
    }
    public void stop(){
    	//메소드 정의
    }
}

 

인터페이스 구현 구조 예

  Player 인터페이스를 구현한 VideoPlayer 클래스 선언입니다.

class VideoPlayer implements Player {
    public void play(){
        System.out.println("video play");
    }
    public void stop(){
    	System.out.println("video stop");
    }
}

 

 

4. 인터페이스의 상속

  JAVA에서 클래스는 다중 상속을 할 수 없지만 인터페이스는 다중 상속을 하여 인터페이스를 선언할 수 있다.

interface Player{
  void start();
}
interface Action{
  void speed();
}

interface Car extends Player, Action{ //다중 상속의 예
}

  

5. 인터페이스 디폴트 메소드와 정적 메소드

 자바 버전 8부터 기본 메소드처럼 사용할 수 있는 디폴트 메소드와 정적메소드를 사용 할 수 있게 되었다.

 

인터페이스에서 디폴트 메소드

1. 제어자 default로 메소드를 정의한다.

2. 인터페이스를 구현할 때 디폴트 메소드를 오버라이드 하여 재정의할 수 있다.

3. 인터페이스의 추상 메소드와 다르게 필수로 구현하지 않아도 된다. (오버라이드 하지 않아도 된다.)

 

다음은 디폴트 메소드의 예시이다.

class 클래스 이름 implements 인터페이스 이름 {
    default void play(){
    	System.out.println("video play!!");
    }
    public void stop(){
    	//메소드 정의
    }
}