Ⅱ. 인터페이스(Interface)
1. 인터페이스
※ 인터페이스 : 클래스 상호 간의 공통사항을 공유하기 위한 일종의 약속
- 모든 필드가 public static final로 정의
- 모든 메소드가 public abstract로 정의 (디폴트 메소드 제외)
- 인터페이스로 new 연산 못함
- 인터페이스도 다형성 적용 가능
- 디폴트 메소드는 public로 정의 - 자체적으로 객체 생성 불가
2. 인터페이스 정의
3. 인터페이스의 상속
- 상속 시 implements 사용
// Example
package sample;
// 인터페이스 : 클래스 상호 간의 공통사항을 공유하기 위한 일종의 약속
interface Refri {
void iceMaking();
void normalTemp();
void coldTemp();
}
// 인터페이스는 클래스에 의무를 제공
// 참고 : 인터페이스의 자원은 public 이므로, 상속 시, 이보다 좁아질 수 없음
class LGRefri implements Refri {
public void iceMaking(){} // 좁아지지 않기 위해 public을 추가
public void normalTemp(){}
public void coldTemp(){}
}
public class Main {
public static void main(String[] args) {
}
}
- 다중 상속 가능
※ 동일한 타입(클래스/인터페이스) 상속 시 extends, 다른 타입을 상속하는 경우 implements
// Example
package sample;
// 다중 상속 예제
interface Camera {void photo();}
interface Phone {void calling();}
interface Memo {void writing();}
interface Clock {void displayTime();}
class SmartPhone implements Camera, Phone, Memo, Clock{
public void photo() {}
public void calling() {}
public void writing() {}
public void displayTime() {}
}
public class Main {
public static void main(String[] args) {
SmartPhone a = new SmartPhone();
Camera b = new SmartPhone(); // interface는 부모가 자식의 것을 사용 가능
}
}
4. 디폴트 메소드
- 인터페이스 내부의 완성된 메소드
- 인터페이스를 추후 수정하고 싶을 때 사용
5. 디폴트 메소드의 작성 방법
- 메소드 앞에 default 키워드 추가
- 오버라이딩도 가능
// Example
package sample;
// 디폴트 메소드 : 인터페이스에 뒤늦게 추가하는 메소드
interface Dog {
void bark();
void eat();
default void walk() {
System.out.println("하루 한번 꼭 산책해야 한다");
}
}
class Pug implements Dog {
public void bark() {}
public void eat() {}
void callwalk() {
// 부모명.super.메소드
Dog.super.walk(); // 부모 인터페이스의 디폴트 메소드 호출 방법
}
}
class Maltese implements Dog {
public void bark() {}
public void eat() {}
}
public class Main {
public static void main(String[] args) {
}
}
6. 정적 메소드의 작성 방법
- 인터페이스 내에 정적(static) 메소드
- 클래스 내부의 정적메소드와 사용방법 동일 (객체 생성 없이 클래스 이름으로 바로 접근 가능)
'Programming Language > Java' 카테고리의 다른 글
이너클래스 - 2. 익명이너클래스(Anonymous class) (0) | 2022.07.14 |
---|---|
이너클래스 - 1. 이너클래스 (Inner class) (0) | 2022.07.14 |
추상클래스 - 1. 추상클래스 (abstract class) (0) | 2022.07.13 |
자바 제어자2 (modifier) - 2. abstract (0) | 2022.07.13 |
자바 제어자2 (modifier) - 1. final (0) | 2022.07.13 |