인터페이스
인터페이스
- 추상 메서드의 집합 + 부수적인요소(static 메서드,디폴트 메서드,상수)
- 구현된 것이 전혀 없는 설계도 , 껍데기 (모든 멤버가public)
추상클래스 인터페이스 차이점
- 추상클래스는 일부만 추상 메서드를 갖고있기만하면 추상클래스
- 추상클래스는 extends 로 구현
- 인터페이스는 전부 추상 메서드만 갖고있다
- 인터페이스는 implements 로 구현
- 인터페이스는 (인스턴스변수,생성자,인스턴스메서드)iv를 가질 수 없다
interface ex01 {
public static final 타입 상수이름 = 값;
public abstract 메서드이름(매개변수목록);
}
- 인터페이스의 모든 메서드는 항상 public abstract이다 그래서 생략가능
- 인터페이스의 상수는 항상 public static final 이다
인터페이스의 상속
- 인터페이스의 조상은 인터페이스만 가능(Object가 최고 조상이 아니다!)
- 인터페이스는 다중 상속이 가능하다(추상메서드는 충동해도 문제 없다)
이름이 같아도 구현부가 어처피 없기때문에 상관없다
인터페이스의 구현
- 인터페이스에 정의된 추상 메서드를 완성하는 것
class 클래스이름 implements 인터페이스이름 {
}
- 일부만 구현 하는 경우, 클래스 앞에 abstract 를 붙여야한다
인터페이스와 다형성
인터페이스를 이용한 다형성
- 인터페이스도 구현 클래스의 부모? yes
- 인터페이스 타입 매개변수는 인터페이스 구현한 클래스의 객체만 가능하다
- 다형성 사용 가능하다
- 인터페이스를 메서드의 리턴타입으로 지정할 수 있다
- 메서드의 반환 타입이 인터페이스면 인터페이스를 구현한 객체를 반환한다
- 형변환 가능하면 리턴해줄수있다

인터페이스의 장점
장점
-
기계의 껍데기 역할
-
두 대상 간의 '연결,대화,소통'을 돕는 '중간 역할'을 한다
-
선언(설계)와 구현을 분리시킬 수 있게 한다 (껍데기 알맹이 분리)
-

-
개발 시간을 단축할 수 있다
-
변경에 유리한 유연한 설계가 가능하다
-
표준화가 가능하다 [ ex)JDBC ]
-
서로 관계없는 클래스들을 관계를 맺어줄 수 있다
디폴트 메서드와 static 메서드
- 인터페이스에 디폴트 메서드, static메서드 추가 가능
- 인터페이스에 새로운 메서드를 추가하기 어려움 ->해결책: 디폴트 메서드
- 디폴트 메서드는 인스턴스 메서드(인터페이스 원칙 위반)
- 디폴트 메서드는 기존 메서드와 충돌할 수 있다 해결책 으론
- 여러 인터페이스의 디폴트 메서드 간의 충돌 =
인터페이스를 구현한 클래스에서 디폴트 메서드를 오버라이딩 해야된다
- 디폴트 메서드와 조상 클래스의 메서드 간의 충돌 =
조상 클래스의 메서드가 상속되고, 디폴트 메서드는 무시된다
내부클래스의 종류,특징,선언
내부 클래스의 장점
- 내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근 할 수있다
- 코드의 복잡성을 줄일 수 있다(캡슐화) 밖에서 안쓰는걸 내부에 생성
- 내부 클래스와는 쉽게 접근이 가능하다

내부 클래스의 제어자와 접근성
- 내부클래스 앞에는 private , static 다 가능하다
- 내부클래스에서 static 을 사용하려면 내부클래스가 static일 때만 가능하다
- final static 은 상수이기 때문에 가능하다

- 스태틱 클래스는 외부 클래스의 인스턴스 멤버에 접근 x
- 내부클래스는 외부클래스의 private 멤버도 접근 가능
- 외부클래스의 지역변수는 final이 붙은 상수만 접근 가능하다

익명 클래스
- 이름이 없는 일회용 클래스. 정의와 생성을 동시에한다
- ex) ActionListener
new 조상클래스이름(){
}
new 구현인터페이스이름(){
}