인터페이스
- 모듈이 해야할 일을 정의 해놓은 것들의 집합
인터페이스로 무엇을 하는가?
- 주로 설계할 때 사용 인터페이스를 구현한 클래스를 사용하게 되는데 우리가 사용 할 때
다양한 클래스를 사용 할때 다형성과 연관
인터페이스 역할
- 인터페이스는 클라이언트 프로그램에 어떤 메서드를 제공하는지 알려주는 명세 또는 약속
- 한 객체가 어떤 인터페이스의 타입이라 함은 그 인터 페이스의 메서드를 구현했다는 의미
- 클라이언트 프로그램은 실제 구현내용을 몰라도 인터페이스의 정의만 알면 그 객체를
사용 할 수 있음
- 인터페이스를 구현 해 놓은 다양한 객체를 사용함 - 다형성
ex) JDBC를 구현한 오라클, MSSQL 라이브러리 등
이미 구현 된 라이브러리가 인터페이스의 예시라고 생각하면 된다.
ex) JDBC Conneciton.statement(); 명세를 해놓은 것을 가져다가 사용하는 것을 예시
인터페이스의 활용이 좋은 점
- 인터페이스를 활용하면 다양한 정책이나 알고리즘을 프로그램의 큰 수정 없이 적용 할 수 있다.
추상클래스와 인터페이스의 차이
- 추상클래스의 경우에는 공통된 모듈이 있을수도 있고 없을 수도 있으며 상속 같은 경우에는
클래스 이므로 한개만 상속 받는다.
하지만 인터페이스의 경우에는 명세가 되어 있는 것이기 때문에 여러개 상속이 가능하다.
인터페이스의 요소
상수: 선언된 모든 변수는 상수로 처리
메서드 : 모든 메서드는 추상메서드
디폴트 메서드 : 기본 구현을 가지는 메서드 구현하는 클래스에서 재정의가 가능함(ver.java8)
정적 메서도: 인스턴스 생성과 상관없이 인터페이스 타입으로 호출하는 메서드(ver.java8)
private 메서드 : 인터페이스 내에서 사용하기 위해 구현하 메서드, 구현하는 클래스에서 재정의 할 수 없음(ver.java9)
여러 개의 인터페이스 구현하기
- 인터페이스는 구현 코드가 없으므로 하나의 클래스가 여러 인터페이스를 구현할 수 있다.
- 디폴트 메서드의 이름이 중복되는 경우에는 재정의
인터페이스 상속
- 인터페이스 간에도 상속이 가능함
- 구현이 없으므로 extends 뒤에 여러 인터페이스를 상속 받을 수 있다.
- 구현 내용이 없으므로 타입 상속(type inheritance) 라고함
public class BookShelf extends Shelf implements Queue{
//배열의 요소 추가
@Override
public void enQueue(String title){
shelf.add(title);
}
//맨 처음 요소를 배열에서 삭제하고 반환
@Override
public void deQueue(String title){
return shelf.remove(0);
}
//배열의 요소 개수 반환
@Override
public void getSize(){
return getCount();
}
}
[다른 인터페이스를 상속을 받아서 인터페이스가 된 경우의 모습]
==================================================================================
예시코드
==================================================================================
package interfaceex;
public interface X {
void x();
}
==================================================================================
package interfaceex;
public interface Y {
void y();
}
==================================================================================
package interfaceex;
public interface MyInterface extends X,Y {
void myMethod();
}
==================================================================================
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 myMethod() {
// TODO Auto-generated method stub
}
}
'JAVA' 카테고리의 다른 글
List 인터페이스 (0) | 2019.10.08 |
---|---|
제네릭 (0) | 2019.10.07 |
컬렉션 프레임워크(Collection Framework) (0) | 2019.10.06 |
String 클래스 (0) | 2019.10.05 |
Object 클래스 (0) | 2019.10.04 |