17강은 인터페이스에 대한 내용이었다.
인터페이스란?
- 메소드의 몸체가 없고 선언부만 존재하는 추상 메소드만 가지고 있다.
- 인터페이스 인스턴스는 생성 불가능 하다. -> new 키워드를 통한 인스턴스 생성 불가함
- 단 인터페이스 참조변수는 선언 가능함.
- implements 키워드를 사용해서 클래스에서 인터페이스의 추상 메소드의 몸체를 작성해서 메소드를 완성한다.
- "메소드를 구현한다." 라고도 말함
- 인터페이스를 선언할 때 추상 메소드의 접근 수준을 명시하지 않더라도 기본적으로 public으로 설정된다.
- 일반적인 변수는 선언할 수 없으나, 상수는 선언이 가능하다.
- 이 경우에는 상수 키워드인 static final이 없이 변수를 선언하면 상수를 선언한 것으로 컴파일러 레벨에서 간주
상속과 구현
Class Robot extends Machine implements Movable, Runnable { ... }
- 예시와 같이 상속과 구현은 동시에 가능하다.
- 둘 이상의 인터페이스를 한 클래스에서 구현 가능하다.
인터페이스 간 상속
interface print {
public void printable(String doc);
}
interface print_color extends {
public void color_printable(String doc);
}
- 클래스 상속과 동일한 방법으로 이루어진다.
- 인터페이스를 구현하는 클래스는 인터페이스에 선언된 모든 추상 메소드에 대한 구현을 진행해야 한다.
- 보다 효율적인 사용을 위한 인터페이스 상속
- 기본적으로 사용되는 인터페이스에 추상 메소드가 추가되는 수정이 발생되면 해당 인터페이스를 구현한 모든 클래스에 추가적인 수정이 필수, 해당 클래스에서 추가된 메소드를 시용 할 일이 없더라도 진행해야 하는 비효율 발생 가능 -> 상속이 이를 해결한다.
디폴트 메소드
interface print {
void printable(String doc);
default void color_printable(String doc) {
System.out.println("Color print");
System.out.println(doc);
}
}
- default 키워드를 사용해서 메소드를 선언한다.
- 기존 인터페이스의 추상 메소드와는 다르게 메소드 몸체까지 전부 선언한다.
- 해당 메소드에 대한 오버라이딩 여부는 개발자가 선택.
인터페이스의 ststic 메소드
- 인터페이스에서도 정의 가능하다.
- 클래스의 static 메소드 마냥 동일한 방법으로 사용할 수 있음
인터페이스 대상의 instanceof 연산
- 연산 구성에서 클래스 이름이 들어가는 부분에 인터페이스 이름을 사용 할 수 있다.
- 이 경우 참조변수가 참조하는 인스턴스가 지정된 인터페이스를 직접 또는 간접적으로 구현한 클래스의 인스턴스 일 경우에 True를 반환하도록 동작
- instanceof 연산의 조건으로 사용할 수 있는 빈 인터페이스를 선언하고 사용할 수 있다.
- Marker 인터페이스라고 부르며, 완전히 빈 인터페이스로 빈 공간으로 놔두면 된다.
추상 클래스
- 하나 이상의 추상 메소드를 가지는 클래스를 추상 메소드라고 부름
- 인터페이스와 동일하게 인스턴스 생성 불가능, 참조변수 선언은 가능
- abstract 키워드를 사용한다.
- 상속을 통해서 추상 메소드를 구현한 후 사용한다.
'프로그래밍 > Java' 카테고리의 다른 글
Java - 예외처리 (2) (0) | 2020.07.17 |
---|---|
Java - 예외처리 (1) (0) | 2020.07.12 |
Java - 상속 (3) (0) | 2020.07.08 |
Java - 상속 (2) (0) | 2020.07.06 |
Java - 상속 (1) (0) | 2020.07.05 |