인터페이스 (Interface)
인터페이스(Interface)
일반클래스, 추상클래스 ,인터페이스도 독립적인 .java 파일로 만들 수 있다.
1.public interface 인터페이스명{}
2. 구성요소 == 생성자는 못가짐
1) 상수, 추상메서드, default 메서드, static 메서드
상수: public static final 자동 생성( 자동 상수화 )
ex) int num = 3; 이라고 인터페이스에 작성하면, 자동으로 public static fianal int num = 3; 로 인식된다.
2) 추상메서드 = public abstract 자동 생성
3) default 메서드 = public default void b(){}
4) static 메서드 = public static void c(){}
3. 추상클래스와 비슷하게 new 생성이 안돼서 힙에 직접 못올라간다.
==> 하위클래스(자식 클래스 아님) 에서 구현하여 인터페이스 요소를 사용한다.
4. 일반클래스 및 추상 클래스의 경우 단일 상속이지만, 인터페이스는 여러 클래스들이 다중 구현할 수 있다.
5. 일반클래스에서 상속 + 인터페이스 까지 같이 쓰는 문법
public class extends 부모클래스명 implements 인터페이스명{}
public interface Flyer {
//구성요소
// 1. 상수
int num = 2; // public static fianl int num = 2; 와 같음.
public static final int COUNT = 2; // 권장
// 2. 추상메서드
public void a(); // public abstract void a(); 와 동일.
void b(String s); // 인터페이스에서 함수 작성시, 명시하지 않음녀 public abstract void b(); 이다. 일반클래스 및 추상클래스처럼 접근지정자가 default가 붙는게 아니다!!!!!!!
public abstract void c(); // 생략 가능하지만, 코드 가독성을 위해 적어주자.
//3. default 메서드
public default void d() {
System.out.println("default 메서드.d");
}
public default void e(int n) {
System.out.println("default 메서드.e");
}
// 4. static 메서드
public static int f() {
return 100;
}
}
6. 인터페이스 끼리도 인터페이스가 가능하지만 상속 키워드를 사용해서 가능하다(entends)
**************개발의 의존성**********************
인터페이스를 잘 사용하자.
has a 관계에서 하나의 클래스를 수정하면, 연동된 여러 클래스들을 일일히 수정해야 하지만, 인터페이스를 구현하면 같은 메소드를 통해 연동되기 때문에 쉽게 수정이 가능하다
ex) db 연동
***익명 클래스 (anonymous class)
이름없는 클래스, 인터페이스 사용시 주로 사용됨.
.java 가 안만들어진다.
바로 메인함수에서 작업한다.
다형성을 이용한다.
문법:
인터페이스명 변수명 = new 인터페이스명 ==> 주의! 뒤에 세미클론 찍으면 안된다.
why? 인터페이스는 new가 안되기 때문
문법 => 인터페이스명 변수명 = new 인터페이스명{}; ==> 중괄호 뒤에 세미클론 붙는다.
인터페이스 사용시 많이 사용되는 중첩 클래스이다.
1. 일반적인 사용: 하위클래스 s = new 하위클래스() or 인터페이스 클래스 s2 = new 하위클래스() (다형성 적용)
2. 익명 클래스 사용: 인터페이스 f = new 인터페이스(){}; (세미클론이 중괄호 뒤에 있다)
3. 목적: 프로그램 내에서 한번만 객체로 만드는데 사용되는 클래스를 굳이 정의할 필요가 없기 때문
인터페이스 특징 정리
1.*.java 파일로 만들어진다(*=파일명)
2. public interface 인터페이스{}
3. 구성요소: 상수, 추상메서드, default메서드(일반메서드, 앞에 public이 붙는다), static 메서드
4. 추상메서드와 똑같이 new가 안돼서 하위클래스를 이용하여 구성요소를 활용해야 한다.
5. 다중으로 인터페이스 가능 (하나의 클래스가 다중으로 인터페이스 하여 구현 가능)
6. 추상클래스와 똑같이 하위 클래스에서 추상메서드에서 강제로, 반드시 재정의 해야한다.
7. 추상클래스와 똑같이 일관되고 통일된 메서드를 사용하는게 목적이며, 의존성 감소가 목적이다.
8. 인터페이스끼리는 상속이 가능하다.(일반적인 상속처럼 단일 상속이 아닌, 다중 상속이 가능한 것이 큰 특징)
하위 클래스가 인터페이스 클래스에 접근하려면 implements 키워드를 사용, 인터페이스 간 상속시 extends 사용.