이것이 자바다 유투브 강좌에 나온 내용중에서 인터페이스 부분을 정리해서 적어둔다.
https://www.youtube.com/watch?v=UPWiPIROG-k
인터페이스 선언
- 추상메서드의 집합
- 구현된 것이 전혀 없는 설계도
- 모든 멤버가 public 이라 생략 가능 (메서드는 public abstract, 상수는 public static final 생략 가능)
- 변수, 생성자를 가질 수 없다.
interface 인터페이스이름 {
public abstract 메서드이름(매개변수목록);
}
인터페이스 구현 (→ 미완성 설계도 완성하기)
- 인터페이스에 정의된 추상 메서드를 완성시키는 것
class 클래스이름 implements 인터페이스이름 {
// 인터페이스에 정의된 추상메서드를 모두 구현해야 한다.
}
- 만약 일부만 구현하는 경우, 클래스 앞에 abstract를 붙여야 한다.
특정한 Class 내에서만 사용하는 인터페이스를 정의한 걸 중첩 인터페이스라고 한다.
main 메서드에서 Button 클래스 객체를 생성하고 setOnClickListener() 메소드를 호출할 때 해당 인터페이스를 구현하는 자식 클래스로 값을 넘겨 준다. 그러면 다형성의 효과로 onClick() 메소드가 override한 결과로 나오게 된다.
public class Button { OnClickListener listener; // 중첩 인터페이스 타입으로 선언 interface OnClickListener { void onClick(); // 추상 메소드 } void setOnClickListener(OnClickListener listener) { this.listener = listener; // 외부에서 구현 객체를 받아서 필드에 저장한다. } void touch() { listener.onClick(); } } |
import InterfaceEX.Button.OnClickListener; public class CallListener implements OnClickListener { @Override public void onClick() { System.out.println("전화를 겁니다."); } } |
import InterfaceEX.Button.OnClickListener; public class MessageListener implements OnClickListener { @Override public void onClick() { System.out.println("메시지를 보냅니다."); } } |
public class ButtonEx { public static void main(String[] args) { Button btn = new Button(); btn.setOnClickListener(new CallListener()); // 내부 인터페이스 객체 생성 btn.touch(); btn.setOnClickListener(new MessageListener()); btn.touch(); Button.OnClickListener listener = new Button.OnClickListener() { @Override public void onClick() { System.out.println("사진을 찍습니다."); } }; btn.setOnClickListener(listener); btn.touch(); btn.setOnClickListener(new Button.OnClickListener() { // 익명 구현 객체 // 익명 객체는 클래스를 상속하거나 인터페이스를 구현해야만 생성할 수 있다. // UI 이벤트 처리 객체나, 쓰레드 객체를 간편하게 생성할 목적으로 주로 사용한다. // 익명 객체는 부모 타입 변수에 대입되므로 부모 타입에 선언된 것만 사용할 수 있다. // 외부에서는 익명 객체의 필드와 메소드에 접근할 수 없다. @Override // 부모 클래스(Button)의 메소드 재정의 public void onClick() { System.out.println("이미지를 클릭합니다."); } }); btn.touch(); } } |
아래 코드는 자바의 정석 동영상 강좌를 듣고 구글링 여러 예제를 하나의 파일로 조합하여 작성한 것인다.
interface Printable {
int x=10;
void print(); // 추상메소드
}
interface Drawable {
void draw(); // 추상메소드
default void msg(){ // Java 1.8 이상에서 제공
System.out.println("Drawable default method");
}
}
interface Showable extends Printable {
// 인터페이스 상속(Inheritance)
void show(); // 추상메소드
}
class Parent {
public void method2() {
System.out.println("This is method2() in Parent Class");
}
}
class Child extends Parent implements Printable, Drawable {
@Override
public void print() { // 인터페이스(추상 메소드) 구현
System.out.println("Hello");
}
@Override
public void draw() { // 인터페이스(추상 메소드) 구현
System.out.println("drawing rectangle");
}
}
class CustomDialog {
// 특정한 Class 내에서만 사용하는 인터페이스를 정의한 걸 중첩 인터페이스라고 한다.
interface CustomDialogListener {
void onAgreeButtonClicked(String smsotp); // 추상 메소드
}
private CustomDialogListener customDialogListener;
public void setCustomDialogListener(CustomDialogListener listener){
customDialogListener = listener;
// 외부에서 구현 객체를 받아서 변수에 저장한다.
}
String smsotp;
public void Cick(){
smsotp = "123456";
customDialogListener.onAgreeButtonClicked(smsotp);
}
}
public class Interface_EX implements Showable {
@Override
public void print() {
System.out.println("print interface method implemented.");
}
@Override
public void show() {
System.out.println("show interface method implemented.");
}
public static void main(String[] args) {
// 객체 생성 1
Child child = new Child();
child.print();
child.draw();
child.msg();
child.method2();
System.out.println(Printable.x);
// 객체 생성 2
Interface_EX interface_ex = new Interface_EX();
interface_ex.print();
interface_ex.show();
// 객체 생성 3
CustomDialog dialog = new CustomDialog();
dialog.setCustomDialogListener(new CustomDialog.CustomDialogListener() { // 익명 구현 객체
// 익명 객체는 클래스를 상속하거나 인터페이스를 구현해야만 생성할 수 있다.
// 익명 객체는 부모 타입 변수에 대입되므로 부모 타입에 선언된 것만 사용할 수 있다.
// 외부에서는 익명 객체의 변수와 메소드에 접근할 수 없다.
@Override
public void onAgreeButtonClicked(String smsotp) {
System.out.println("customdialog result : "+smsotp);
}
});
dialog.Cick();
}
}
|
'안드로이드 > Interface' 카테고리의 다른 글
Android 인터페이스 상속 ISerialListener 예제 (0) | 2019.12.12 |
---|---|
Android Interface AsyncTask 예제 (0) | 2019.11.05 |
Java Interface Example (0) | 2019.09.05 |
Java 인터페이스(interface) 개요 (0) | 2019.08.20 |
Android Interface 예제 ★★★ (0) | 2018.08.22 |