[개발] - Java
Day25. 추상화 (2) 인터페이스
완벽한 장면
2023. 4. 17. 20:24
인터페이스
=> 추상화의 끝판왕
interface 와 interface 끼리 상속이 가능하나, 반드시 class 가 재정의 해야한다.
- 약속을 표현하기 위한 특별한 형태의 클래스
- 인터페이스는 객체를 생성할 수 없음
- 생성자를 갖지 않는다
- 인터페이스의 메서드는 abstract 키워드를 붙이지 않더라도 기본이 추상메서드
- Java 8에서 default method가 등장하여 인터페이스도 구현을 가진 메서드를 가질 수 있음
- 인터페이스의 메서드는 public 키워드를 붙이지 않더라도 기본이 public
- static 메서드를 가질 수 있음(Java 8~)
- 인스턴스 필드를 정의할 수 없음
- 인터페이스는 스펙인데 필드는 구현에 대한 세부내용이므로 필드를 가질 수 없다
형태
interface A{
상수
추상메소드
void abc();
int def(int a);
…
}
class B implements A{
void abc(){ // 메소드 재정의
}
int def(int a){ // 메소드 재정의
return 5;
}
}
interface 는 같은 interface 끼리는 extends 로 상속.
다른 타입, class, abstract class 와는 implements로 상속받는다.
interface A{
}
interface B extends A{
}
원칙상 다중 상속은 안 되지만,
인터페이스는 된다.
interface와 abstract class 는 참조 자료형으로 쓸 수 있다.
예시
package mega.backend_onemore.Day25;
interface K{
void abc();
}
interface R{
void xxx();
}
class RR{
}
// 인터페이스는
class YOU extends RR implements K, R{
public void abc() { // void abc() 면 무조건 에러.
// 즉, 인터페이스는 무조건 오버라이딩 할 때 public을 붙여야 한다.
}
public void xxx() {
}
/*
여기서 class YOU는 RR 클래스를 상속받고, K와 R 인터페이스를 구현합니다.
extends 키워드는 클래스 상속을 나타내며,
implements 키워드는 인터페이스 구현을 나타냅니다.
따라서 class YOU는 RR 클래스를 상속받고, K와 R 인터페이스를 구현한 것입니다.
인터페이스 구현은 다중 상속이 가능하므로,
class YOU는 K와 R 인터페이스에서 정의된 모든 추상 메서드를 구현해야 합니다.
여기서는 abc()와 xxx() 메서드를 구현하였습니다.
abc() 메서드에서 public 키워드를 사용하는 것은
인터페이스에서 정의된 메서드를 구현할 때
반드시 접근 제어자를 public으로 명시해야 한다는 규칙에 따른 것입니다.
*/
}
interface X extends K { // 인터페이스간의 상속은 extends
void def();
}
abstract class Y implements X { //구현 가능
// 오버라이딩 매우 가능
// * 추상화클래스에서는 일반 메서드 생성 가능하므로.
public void abc() {
}
abstract void kor();
}
class KOR extends Y{
public void def() { // X에 있는 추상메서드와.
// 인터페이스니까 public
}
void kor() { // Y에 있는 추상메서드를 오버라이딩 마저 해줘야 정상작동할 수 있다.
// 즉 마지막 손자 클래스에서는 미 구현된 추상화 부분을 최종적으로 구현 완료해주어야 한다.
}
//* 여기서 abc() 재정의도 가능
}
public class InterfaceTest {
public static void main(String[] args) {
}
}
728x90
반응형