티스토리 뷰

Java

자바 인터페이스(interface)

Xion 2018. 8. 17. 16:55





< interface  인터페이스 >

-interface란 abstract와 final과 함께 대표적인 규제이다.

-인터페이스의 역할은 어떠한 A라는 클래스가 있고 그  A 클래스가 특정한 인터페이스 ( I ) 를 사용한다면 그 클래스(A)는 반드시 사용하는 인터페이스( I )의 메소드를 구현해만 사용할 수 있다.

-한개의 class가 여러개의 interface를 구현할 수 있다.

-반드시 접근 제어자는 public이어야만 한다.

-interface도 상속이 가능하다.  

ex) interface A {                                        //인터페이스 A 선언

public void a();

}


interface B extends A {                        //인터페이스 B 선언과 동시에  인터페이스A를 상속받음

  public void b();                               

}


class C implements B {                        // class C선언 동시에 인터페이스 B를 구현함.

public void a() { }                         // interface A에 속한 a()메소드 구현

public void b() { }                         // interface B에 속한 b()메소드 구현


}


->          interface가 interface를 상속받을 때 = extends

              class    가   interface를 구현할 때   = implements 

 







interface 문법




< 인터페이스를 왜 사용하는가 ? >


예로, 계산기 class가 아주 거대하고 복잡하고 많은 사람들이 참여해서 진행하는 프로젝트라고 할때 , 계산기 class를 만드는

개발자가 있고 그 개발자가 만든 계산기class를 사용한 것을 구현하는 B가 있다고 할때, 

즉, A개발자 ->계산기 class를 만드는 사람

B개발자 ->계산기 class를 만든 것을 이용해 개발하는 사람

이럴경우 가짜 class를 만드는것이 편리하다. 

즉, 공유해서 같이 사용할 수 있는 인터페이스를 구현하는 것이 좋다.


또한 , interface를 선언 후 정의되는 멤버들의 접근 제어자는 반드시 public이어야만 한다 

->다른 클래스에서 implements 할때 접근이 가능해야 하므로




class와 interface의 차이점 

->class : 한 개의 부모만 가질 수 있으며 한 개의 클래스만 상속받을 수 있다.

-> interface : 한 개의 클래스에서 여러개의 interface를 상속받는 것이 가능하다.




interface와 abstract의 차이점


   interface 

1.구체화 된 메소드를 가질 수 없지만 코드를 한번 작성해 놓아도 다른곳에서 사용할 때 다시 오버라이드 하여 입맛에 맞게 작성하면 된다.

2. abstract와 다르게 구체적인 로직을 가지고 있는 로직을 interface에 포함시키면 안됨. (반드시 본체가 없어야함 )

 

abstract 

1.일반적인 클래스와 같음 ( 다만 abstract이기 때문에 특정 abstract메소드를 하위 class가 상속 받아 사용하도록 강제하는 것 )

2.하위 class에서 오버라이딩(상속) 하도록 비어있는 내용의 abstract 메소드가 있지만  동시에 실제 구체적인 로직을 가지고 있는

메소드나 OR 필드가 존재할 수 있는 형태 

인터페이스는 반드시 본체가 없는 메소드들만을 가지고 있어하는 특징을 가지고있음


인터페이스는 대상이되는 시스템을 제어하기위해 제어할때 사용되는 장치들이다.


'Java' 카테고리의 다른 글

Exception을 직접 발생시키는 방법  (0) 2018.08.28
예외처리 finally  (0) 2018.08.21
JAVA - 다형성 (polymorphism)  (0) 2018.08.17
abstract(추상 클래스)와 interface의 차이점  (0) 2018.08.17
abstract추상화  (1) 2018.08.17