Java 8 - Interface바뀐점을 알아보기
Java 8부터 interface에 많은 변화가 생겼는데
java 8이 처음 출시된 것은 2014년 3월 18일입니다.
Lamda 표현식, Stream API, Optional , Completable 등의 여러 가지가 추가되었지만
이글에서는 interface의 변경점에 대하여 알아보도록 하겠습니다.
Java 8의 변경점 - 인터페이스가 가질 수 있는 것들
1.1 상수 필드(public static final)
public interface Parent{
public static final MAX_VALUE = 100;
public static final MIN_VALUE = 0;
}
1.2 추상 메서드(public abstract)
public interface Parent{
// 추상 메소드
public abstract void run();
//일반메소드 선언은 (abstract가 생략되어있는것입니다.)
public void excute();
}
일반 메서드 선언은 (abstract가 생략되어있는 것입니다.)
1.3 디폴트 메서드(public default)
public interface Parent{
// 디폴트 메소드 : 실행 내용까지 작성이 가능하다.
public default void setState(boolean state){
if(state){
System.out.println("현재 상태는 정상입니다");
}else{
System.out.println("현재 상태는 비정상입니다");
}
}
}
default키워드를 이용하여 작성한 메서드는 내용을 작성 가능하며 override 할 수 있습니다.
1.4 정적 메서드(public static)
public interface Parent{
// 정적 메소드
public static void change(){
System.out.println("상태를 변경합니다.");
}
}
Parent.change() 식으로 객체 없이 인터페이스만으로도 호출이 가능합니다.
override가 불가능합니다.
2.1 익명 구현 객체
자바 8에서 지원하는 람다식은 인터페이스의 익명 구현 객체를 생성할 수 있도록 추가되었습니다
UI 프로그래밍에서 이벤트를 처리하거나, 임시 작업 스레드를 만들기 위해서 유용하게 사용될 수 있습니다.
//use case
인터페이스 변수 = new 인터페이스(){
// 인터페이스에 선언된 추상 메소드의 실제 메소드 선언
};
Parent parent = new Parent(){
public void run(){
// 실제 구현 내용
}
};
3.1 자동 타입 변환
인터페이스 변수 = new 구현체(); 의 경우
ex) Car car = new Bus();
3.2 강제 타입 변환
구현 객체가 인터페이스 타입으로 자동 타입 변환되는 경우, 인터페이스에 선언된 메서드만 사용이 가능합니다.
만약에 구현 클래스에 선언된 필드와 메서드를 사용해야 하는 경우에는 강제 타입 변환을 이용하여
다시 구현 클래스 타입으로 변환해야 합니다.
구현클래스 변수 = (구현클래스)인터페이스변수;
ex) Bus bus = (Bus)car;
4 Functional Interface
양이 많아 다른게시글에 따로 소개하였습니다.
아래 페이지로 이동하여 확인하시면 됩니다.
https://beomseok95.tistory.com/277
정리
interface의 default 메서드
- interface에서도 메서드 구현이 가능합니다
- 참조 변수로 함수를 호출할 수 있습니다.
- implements 한 클래스에서 재정의가 가능합니다
interface의 static 메서드
- interface에서 메서드 구현이 가능합니다
- 반드시 클래스 명으로 메서드를 호출해야 합니다.
- 재정의 불가능!
익명 객체를 구현할 수 있습니다.
Functional인터페이스를 이용하면 람다를 이용하여 인스턴스를 생성할 수 있습니다.
'JAVA' 카테고리의 다른 글
Java 8 - More Functional Interface!! (0) | 2019.10.13 |
---|---|
Java 8 - Function Interface (3) | 2019.10.13 |
equals,hashCode 알아보기 (2) | 2019.10.01 |
Lombok 알아보기 (4) | 2019.09.15 |
boilerplate (2) | 2019.09.15 |
댓글