티스토리 뷰

Goal

 - 인터페이스에 대해 알아본다

 - 인터페이스의 역할에 대해 알아본다 

 - 타입 상속과 형 변환에 대해 알아본다

 

1. 인터페이스

 - 인터페이스의 요소 : 추상 메서드, 상수, 디폴트 메서드, 정적 메서드, private 메서드

 - 어떤 객체에 대한 명세서, 일종의 설명서 

 

인터페이스 구성요소

2. 인터페이스의 역할

 - 인터페이스는 클라이언트 프로그램에 어떤 메서드를 제공하는지 알려주는 명세(specification) 또는 약속.

 - 한 객체가 어떤 인터페이스의 타입이라 함은 그 인터페이스의 메서드를 구현했다는 의미

 - 클라이언트 프로그램은 실제 구현내용을 몰라도 인터페이스의 정의만 알면 그 객체를 사용할 수 있음

 - 인터페이스를 구현해 놓은 다양한 객체를 사용함 - 다형성 : JDBC를 구현한 오라클, MSSQL 라이브러리 등

 

3. 타입 상속과 형 변환

Calc calc = new CompleteCalc();

 - 인터페이스를 구현한 클래스는 인터페이스 타입으로 변수를 선언하여 인스턴스를 생성할 수 있음.

 - 인터페이스는 구현 코드가 없기 때문에 타입 상속이라고도 함.

 

인터페이스에서의 형변환

4. 인터페이스 상속

 - 인터페이스 간에도 상속이 가능함

 - 구현이 없으므로 extends 뒤에 여러 인터페이스를 상속받을 수 있음 

 - 구현 내용이 없으므로 타입 상속(type inheritance) 라고 함.

 

4-1 class MyClass

 - interface인 X, Y를 extends한 Myinterface를 최종적으로 MyClass가 implements 하고있기 때문에, 총 3개의 객체에 명시된 메서드를 MyClass가 구현해야 한다.

package interfaceex;

public class MyClass implements Myinterface {

    @Override
    public void x() {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void y() {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void myinterface() {
        // TODO Auto-generated method stub
        
    }

}

5. 인터페이스 구현과 클래스 상속 함께 사용하기

 - 클래스는 implements와 extends 동시에 가능.

 

 

5-1 class Shelf

package bookshelf;

import java.util.ArrayList;

public class Shelf {
    
    protected ArrayList<String> shelf;
    
    public Shelf() {
        shelf = new ArrayList<String>();
    }
    
    public ArrayList<String> getShelf(){
        return shelf;
    }
    
    public int getCount() {
        return shelf.size();
    }
    
    

}

5-2 interface Queue

package bookshelf;

public interface Queue {
    
    void enQueue(String title);
    String deQueue();
    
    int getSize();

}

5-3 class BookShelf

 - Shelf를 extends하고 Queue를 implements 했기 때문에, shelf의 기능을 사용할 수 있고, Queue의 메서드의 기능을 구현해야하는 의무가 있음.

package bookshelf;

//상속과 implements 둘다 실행 
public class BookShelf extends Shelf implements Queue {

    
    @Override
    public void enQueue(String title) {
        shelf.add(title);
        
    }

    @Override
    public String deQueue() {
        return shelf.remove(0);
    }

    @Override
    public int getSize() {
        return getCount();
    }

}
댓글