자바의 인터페이스를 통해서 구현을 강제하고 다형성을 제공하며 결합도를 절감시키는 효과를 얻을 수 있습니다.
Java 8 이전에는 이런 특징 때문에 필요한 부분만 재정의하고 재사용하기 위해서는 Adapter라는 개념을 구현하여 사용했습니다.
interface MyExample {
void exam1();
void exam2();
}
class MyAdapter implements MyExample {
@Override
public void exam1() {
// 재정의 할 부분
}
@Override
public void exam2() {
// 재정의 하고 싶지 않은 부분
}
}
class Body extends MyAdapter {
@Override
public void exam1() {
// ...구현부...
}
// exam2는 따로 재정의 하지 않아도 됩니다 !
}
구현체를 만들어서 재정의하고 싶지 않은 부분도 반드시 재정의 했어야 하죠.
Java 8 부터는 인터페이스의 메소드도 구현부를 가질 수 있게 됐습니다. 당연히 재정의하지 않고 사용할 수도 있죠 !
Default Method
문법은 구현부를 가질 메소드에 default 키워드를 붙여주고 구현부를 작성합니다.
예시 문법은 다음과 같습니다.
interface MyExample {
void exam1();
default void exam2() {
System.out.println("Default Method");
}
}
이렇게 되면 아까처럼 MyAdapter를 통해서 추상 클래스를 만들고 이를 상속받아서 구현할 필요가 없어지죠 🔥
class Body implements MyExample {
@Override
public void exam1() {
// ...구현부...
}
// exam2는 따로 재정의 하지 않아도 됩니다 !
}
'개발 > Java' 카테고리의 다른 글
[SOLID] 객체 지향 설계의 5가지 원칙 (0) | 2023.07.04 |
---|---|
[Java] Functional Interface와 익명 클래스 (0) | 2022.10.19 |
[Java] JVM? JRE? JDK? (0) | 2022.10.18 |
객체지향 프로그래밍과 설계 (0) | 2022.10.18 |
[Java] String, StringBuilder, StringBuffer (0) | 2022.10.18 |