티스토리 뷰
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();
}
}
'Java > Java 올인원 패키지' 카테고리의 다른 글
21. String, Wrapper 클래스 (0) | 2020.03.19 |
---|---|
20. Object 클래스 (Java) (0) | 2020.03.18 |
18. 템플릿 메서드 (Java) (0) | 2020.03.17 |
17. 추상 클래스, 템플릿 메서드 (Java) (0) | 2020.03.17 |
16. 다운캐스팅과 instanceof (Java) (0) | 2020.03.17 |
- 20200427
- 20200403
- 20200504
- 20200502
- 20200624
- 20200420
- 20200421
- 20200406
- 20200622
- 20200429
- 20200317
- 20200330
- 20200417
- 20200503
- 생활코딩리눅스
- 20200319
- 20201204
- 20200804
- 20200428
- 20200415
- 20200510
- likelion
- 20200424
- chapter7
- 20200413
- 20200425
- 20200512
- 백준
- 20200423
- chapter8
- Total
- Today
- Yesterday