인터페이스 Interface
- 자바에서는 class의 다중상속을 할 수 없다.
- 다중상속의 효과를 기대할 목적으로 interface를 이용
- interface도 하나의 자료형(Date Type)으로 생각
- 상수와 메소드 선언부 만으로 구성(추상 메소드만으로 구성)
- 일반 멤버 변수와 body가 구체화 된 method는 가질 수 없다.
- 완전 추상이며, 굳이 메소드명 앞에 abstract를 붙이지 않아도 된다. default가 abstract
- 후손클래스들이 반드시 재정의 해야 할 메소드의 "명세서"
- 인터페이스는 추상클래스와 마찬가지로 객체화 할 수 없다.
- 인터페이스는 body가 있는 메소드를 가질 수 없다.
- 인터페이스의 멤버변수는 초기값을 줘야한다.(클래스 처럼 자동 초기값이 안된다)
인터페이스 구현하는 방법
- 하나의 자료형 class처럼 interface 라고 쓰면 된다
- interface B
- 인터페이스를 구현하기 위해서는 implements를 쓴다.
class C extends A(클래스명) implements B(인터페이스명)
- 인터페이스는 여러 개 구현이 가능하다.
인터페이스 요소
- 인터페이스 상수
- 디폴트 메서드와 정적 메서드 : 자바 8부터는 인터페이스 활용성을 위해 제공하는 기능
- 디폴트 메서드는 일반 메서드와 동일하게 구현하고, 메서드 자료형 앞에 default 예약어를 써주면 된다. 디폴트 메서드 재정의가 가능하다. 이클립스 source에서 추가 한 후, super.메소드명( ); 부분을 삭제 한 후 재정의 하면 된다.
- 정적 메서드는 static 예약어를 사용하여 선언하며 클래스 생성과 무관하게 사용 가능하다. 정적 메서드를 사용할 때는 인터페이스 이름으로 직접 참조하여 사용
- private 메서드 : 자바 9 부터 인터페이스에 private 메서드 구현 가능, private 메서드는 인터페이스를 구현한 클래스에서 사용하거나 재정의 할 수 있다. 인터페이스에서는 private 예약어를 사용할 수 없지만, private static 메서드로 구현하면 된다.
class A{
String title;
public A(String title){
this.title = title;
}
public void info(){
System.out.println(title);
}
}
interface B{
public void pro();
}
인터페이스의 확장
인터페이스를 구현할때는 implements 키워드를 사용합니다.
interface를 확장하여 새로운 Interface를 만들때는 extends를 사용
interface A
{
public void pro();
}
interface B extends A
{
public void test();
}
class C implements B
{
//이 안에 pro 메소드와 test메소드를 모두 재정의 해줘야 한다.
}
이벤트 인터페이스의 경우, 이벤트 인터페이스를 implements로 구현하면 frame에 add해당리스너(this)를 해야 한다.
실제로 어떻게 쓰이는지 알기 위해서는 아래 포스팅으로 이동.
반응형
'Java | spring > 자바 객체지향' 카테고리의 다른 글
Java Interface 확장, 예제(멤버변수 변경 에러 이유) (0) | 2019.05.07 |
---|---|
Java 프로그래밍 기본, 메소드 method (0) | 2019.05.07 |
구현되지 않은, 추상클래스(abstract class) (0) | 2019.05.07 |
Java Class 구조, 접근명시자(static, public) (0) | 2019.05.07 |
상속과 다형성, 오버라이딩?! 오버로딩?! (0) | 2019.05.07 |
댓글