본문 바로가기

Java

[Java] Interface 정리(2)

반응형

Instanceof

 
인터페이스의 instanceof의 문장은 다음과 같다.
 

if(인스턴스 instanceof (interface or extends class) )

 
인스턴스의 클래스가 직접 구현한 interface인지, 아니면 상속받은 클래스가 구현한(간접구현) 것이면 True를 반환한다.
 

package interFaces;



interface PrinterA{
    void PrintA(String str);
}

class SimpleP implements PrinterA {
    @Override
    public void PrintA(String str) {
        System.out.println("프린터");
    }
}

class MultiP extends SimpleP{

    public void PrintA() {
        super.PrintA("프린트1");
        super.PrintA("프린트2");
        super.PrintA("프린트3");
    }
}

public class instanceofInter {
    public static void main(String[] args) {
        PrinterA S = new SimpleP(); // 인터페이스 직접 구현
        PrinterA M = new MultiP(); // SimpleP를 상속받아서 간접적으로 구현

        if(S instanceof PrinterA){
            System.out.println("직접구현");
        }
        if(M instanceof PrinterA){
            System.out.println("간접구현");
        }
    }
}

 
S는 PrinterA의 인터페이스를 직접 구현한 SimpleP를 가지고 있으며, M은 SimpleP가 구현한 PrintA 메소드를 간접적으로 다시 구현하였다.
 

아쉽게도 클래스다이어그램을 그릴줄 모른다 :(...
 
여튼...  S(SImpleP)와 PrinterA의 관계는 직접 구현한 관계이고, M(MultiP)와 PrinterA의 관계는 간접적으로 구현한 관계이므로 모두 True이다.
 

Abstract Class

 
하나 이상의 추상메소드를 갖는 클래스를 가리켜 추상 클래스(Abstract Class)라고 한다.
 

package interFaces;

public abstract class Abst {
    public void methodOne(){
        System.out.println("첫번째 메소드야");
    }
    
    // 하나 이상의 추상 메소드
    public abstract void methodTwo();
}

class AbstExtends extends Abst{

    @Override
    public void methodTwo() {
        System.out.println("구현을 해야만 해");
    }
}

 
추상 클래스를 선언하려면 클래스의 선언부에 abstract 키워드를 추가 해야한다. 일반 클래스와 인터페이스를 섞어놓은 듯한 느낌이 든다. 상속받는 클래스는 반드시 구현을 해야만 한다.

'Java' 카테고리의 다른 글