강의를 들으며 내가 알고 있는 내용을 점검하고,
새로 배운 내용을 정리하며,
궁금한 내용을 알아가며 학습해나가는 것을 목표로 합니다.
강의를 들으며 내가 알고 있는 내용을 점검하고,
새로 배운 내용을 정리하며,
궁금한 내용을 알아가며 학습해나가는 것을 목표로 합니다.
인터페이스의 기능과 활용법에 대해 알아봅시다.
원래 인터페이스는 구현체를 가질 수 없지만,
자바 8부터는 디폴트 메서드를 통해 구현체를 가질 수 있습니다.
인터페이스에 새로운 메서드가 추가되면 인터페이스를 구현하는 모든 클래스들이 해당 메서드를 구현해야 하는 문제점이 있었는데, default 메서드로 선언하면 이런 문제점이 사라집니다.
이러한 변화를 통해서
그러나 인터페이스가 다중 상속이 가능하기 때문에 같은 default 메서드로 정의한 여러개의 인터페이스를 한 클래스가 다중상속을 하게 되면 충돌이 발생합니다.
@Override
public String sayHello() {
return HelloWorld.super.sayHello();
}
그렇기 때문에 여러 인터페이스 중 어떤 메서드를 사용할 지 명시적으로 구현을 해야합니다.
인터페이스의 자바 8에서 또 하나의 변화가 static method입니다.
정적 메서드는
interface.method
이와 같은 방법으로 메서드를 호출하며 정적 메서드는 프로그램 시작과 동시에 생성되기 때문에 다시 재정의(Override)할 수 없습니다.
또 정적 메서드는 하위 클래스가 동일한 이름의 메서드를 가질 수 있습니다.
이러한 정적 메서드를 통해 기존에는 특정 인터페이스의 메서드를 사용하기 위하여 별도의 클래스를 만들어야 했으나, 그럴 필요가 없게 되었습니다.
지금까지 우리는 클래스에 종속된 함수를 메서드라고 불렀습니다.
이러한 메서드 중에서 추상 메서드를 하나만 갖는 메서드를 Funtional Interface라고 합니다.
default나 static 메서드는 여러가지 있어도 상관없습니다.
함수형 인터페이스를 사용할 때는 주로 @FuntionalInterface 어노테이션을 함께 작성하여 인터페이스 검증과 유지보수를 위해 붙여줍니다.
익명 클래스는 이름이 없는 클래스를 뜻 합니다.
이름이 없기 때문에 클래스를 정의 후 바로 인스턴스를 생성해야 합니다.
일반적으로는
일 때 익명 클래스의 활용을 고민해 볼 수 있습니다.
익명 클래스를 만들기 위해서는 하나의 클래스를 상속하거나 또는 하나의 인터페이스를 구현해야 합니다.
익명 메소드를 사용해서 간결한 인터페이스 인스턴스를 생성하는 방법입니다. Funtional Interface로만 사용할 수 있으며 익명 클래스와 같이 한 번만 사용할 수 있습니다.
함수형 프로그래밍의 개념을 기반으로 출력값이 다시 매개변수로 전달 될 수 있고 메소드의 결과 값으로 반환 될 수 도 있습니다.
(parameter) -> {function main}
이러한 람다식은 코드를 간결하게 만들어 가독성을 향상 시키고, 코딩 하는 시간을 빠르게 줄일 수 있습니다.
method reference는 람다 표현식이 하나의 메소드 만을 호출 하는 경우에 해당 람다 표현식에서 불필요한 매개변수를 제거하고 사용할 수 있게 해줍니다.
ClassName::methodName
또는
varName::methodName
형태로 사용됩니다.
이는 입력 값을 변경하지 말라는 표현 방식으로 쓰일 수도 있으며 개발자의 개입을 차단함으로 안정성을 얻을 수 있습니다.