JAVA

인터페이스 / 선언/ 구현

jojelly 2020. 9. 7. 19:10
반응형

인터페이스는 코드와 객체가 통신하는 접점을 말한다. 

개발코드는 객체를 사용할때 인터페이스의 메소드만 알고있으면 된다.

인터페이스는 객체를 교환하여 사용할 수 있는데 이러한 기능은 개발코드를 변경하지 않고도 리턴값 및 실행내용을 다양하게 만들 수 있다.

 

 

인터페이스 선언법

 

[public] interface 인터페이스명{'''}

 

 

인터페이스의 구성멤버로는 

상수, 추상메소드, 디폴트메소드 정적메소드가 있는데               는 자바 8이후로 가능해졌다고 한다.

 

인터페이스의 구성멤버

 

추가적으로 인터페이스 선언에서 알아두어야 할 부분은

  • 상수 필드만 선언가능(데이터를 저장하지 않는다.)
  • 선언된 필드는 모두 public static final이다. (이는 생략시에도 컴파일과정에서 자동으로 추가된다.)
  • 상수명은 대문자로 작성 (단어가 결합되면 낙타표기법 사용)
  • 선언과 동시에 초기값 지정  ( static {}블록으로 초기화가 불가능하다.)

 static {}블록으로 초기화가 불가능하다.

 

 

 


추상 메소드 선언

 

Public abstract 리턴타입 메소드명 (매개변수);

 

 

  • 인터페이스를 통해 호출된 메소드는 객체에서 실행된다.

 

    • 추상 메소드는 기본적으로 실행 블록이 없는 추상 메소드로 선언된다.
    • public abstract를 생략해도 컴파일 과정에서 자동으로 붙는다.
1
2
3
4
5
6
7
8
9
10
11
12
package day200804;
public interface RemoteControl {
    //상수
    int MAX_COLUME = 10;
    int MIN_VOLUME = 0;
    
    public void turnOn();
    public void turnOff();
    public void setVolume(int voiume);
    //추상 메소드 (선언부만 작성한다 실행부는 없다.)
}
cs

 


디폴트 메소드 선언 (java 8부터 추가)

 

Public default 리턴타입 메소드명 (매개변수){} 

 

  • 실행블록가지고 있는 메소드이다.
  • default 키워드를 반드시 붙여야 한다. 
  • Public 접근제한이 기본이다. (생략하더라도 컴파일 과정에서 자동으로 붙는다.)

 


정적메소드 (java 8 부터 추가)

 

public static 리턴타입 메소드명 (매개변수) {}

1
2
3
4
5
6
7
8
package day200804;
public interface RemoteControl {
    
    static void changeBettery() {
        System.out.println("건전지를 교환합니다.");
    }
}
 
cs

 


인터페이스 구현

 

public class 구현 글래스명 implements 인터페이스명 {

// 인터페이스에 선언된 추상 메소드의 실체 메소드 선언

}                                                                    

 

 

자신(구현 클래스)의 객체가 인터페이스 타입으로 사용할 수 있음을 implements로 명시한다.

 

  •  구현 클래스의 메소드의 선언부가 인터페이스의 메소드 선언부와 정확히 일치해야한다.
  • 인터페이스의 모든 추상메소드를 작성해야한다. 
  • 일부만 재정의할 경우 추상 클래스로 선언 + abstract키워드를 붙여준다. 

TIP!

 

 TIP! 클래스를 만들때 name아래 abstract를 선택해주면 굳이 쓰지 않고도 클래스가 생성될 때  만들어져 나온다

 

 

구현예시

  • 인터페이스 메소드는 public접근제한을 갖기 때문에 public보다 낮은 접근제한은 할수없다.(ex.private, protected )
  • @override 어노테이션을 이요하여 재정의가 정확히 되었는지 체크하여야 한다.  

 

+ 인터페이스를 사용하지 않는경우

Television tv = new Television();

 

+인터페이스를 사용하는 경우

RemoteControl rc;                       인터페이스변수 ;

rc = new Television();                 변수 = 구현객체;

                

반응형