728x90

이것이 자바다 유투브 강좌에 나온 내용중에서 인터페이스 부분을 정리해서 적어둔다.

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();
 
    }
}
 

 

 

블로그 이미지

Link2Me

,