인터페이스
- 클래스 or 프로그램이 제공하는 기능을 명시적으로 선언하는 역할
- 추상 메서드와 상수로만 이루어져 있다.
- 인스턴스를 생성할 수 없다.
- Class 대신 inferance 사용
- 인터페이스에서 선언하는 변수는 상수로 변환됨 ( public static final 사용하지 않아도 됨. )
- 인터페이스에서 선언하는 메서드는 추상메서드로 변환됨 ( public abstarct 사용하지 않아도 됨. )
- 선언한 기능을 클래스가 구현한다는 의미로 implements 예약어를 사용
ex) public class Calculator implements Calc {
}
- 상속과 마찬가지로 상위 클래스 자료형으로 묵시적 형변환이 가능
- 형변환시 사용 할 수 있는 메서드는 인터페이스에서 선언한 메서드뿐! ( 상속과 같음 )
인터페이스 역할
- 어떤 메서드를 제공하는지 미리 알려주는 명세 or 약속
- 인터페이스를 구현한 클래스가 어떤 기능의 메서드를 제공하는지 명시하는 것
- 클라이언트 프로그램은 인터페이스에서 약속한 명세대로 구현한 클래스를 생성하여 사용
서버
- 기능을 제공하는 쪽
클라이언트
- 기능을 사용하는 쪽
인터페이스와 다형성
- 인터페이스를 사용하면 다형성을 구현하여 확정성 있는 프로그램 제작 가능
- 클라이언트 프로그램을 많이 수정하지 않고 기능을 추가하거나 다른 기능을 사용 가능
디폴트 메서드
- 인터페이스에서 구현코드까지 작성한 메서드
- 인터페이스를 구현한 클래스에 기본적으로 제공하는 메서드
- default 예약어 사용
- ex)
default void description(){
System.out.println("정수 계싼기를 구현합니다."
}
- 하위 클래스에서 디폴트 메서드 재정의가 가능
정적 메서드
- 인스턴스 생성과 상관없이 사용 할 수 있는 메서드
- 정적 메서드 사용시 인터페이스 이름으로 직접 참조하여 사용( Calc.X( ); )
- static 예약어 사용
public inferance Calc {
public static void X(){
System.out.println("계산을 시작합니다.")
}
}
private 메서드
- 인터페이스를 구현한 클래스에서 사용하거나 재정의 하지 못함
- 구현한 클래스에서 공통으로 사용하는 경우 용이
- 추상메서드에 private 예약어 사용 불가!!
- 하지만 private에 static 예약어는 가능!!
private static 메서드
- 정적 메서드에서 호출하여 사용
디폴트 메서드와 정적 메서드가 정의되어 있어도 인스턴스는 생성 할 수 없다!!!!
한 클래스가 여러 인터페이스를 구현하는 경우
public class Customer implements Buy, Sell{
...
}
- 두 인터페이스에 이름이 같은 메서드가 선언되어도 구현에는 문제가 없다. Why?? 어차피 하위 클래스에서 재정의하기 때문!!
두 인터페이스에 디폴트 메서드가 중복되는 경우
public interface Buy{
default void order(){
System.out.println("구매 주문");
}
}
//order() 오류발생
public interface Sell{
default void order(){
System.out.println("판매 주문");
}
}
// order() 오류발생
- 두 메서드가 중복되었으니 재정의 하라는 오류가 발생한다.
정적 메서드의 경우 인터페이스 이름으로 특정하여 호출하기 때문에 상관 없다!!!!
인터페이스 상속하기 ( 형 상속 : type inheritance )
- 인터페이스 간 상속은 구현 코드를 통해 기능을 상속하는 것이 아님!
- 인터페이스는 여러개를 동시에 상속 가능
인터페이스 구현과 클래스 상속 함께 쓰기
public class A extends B implements C{
...
}
큐
- 처음 들어간 자료부터 꺼내어 사용 하는 것
- 꺼내어 사용하면 total 갯수는 소모된다.
728x90
반응형
'Language > Java' 카테고리의 다른 글
'Do it 자바프로그래밍 입문' 12장 정리 (2) | 2022.09.30 |
---|---|
'Do it 자바프로그래밍 입문' 11장 정리 (0) | 2022.09.27 |
'Do it 자바프로그래밍 입문' 9장 정리 (0) | 2022.09.21 |
'Do it 자바프로그래밍 입문' 8장 정리 (0) | 2022.09.19 |
'Do it 자바프로그래밍 입문' 7장 정리 (0) | 2022.09.12 |
댓글