1. 디폴트 메서드 Default Method
- 1.1 개요
- 자바의 인터페이스는 자바2, 자바5 에서도 일부 변화가 있었지만 가장 큰 변화는 Java8 에서라고 볼 수 있다.
- 자바8의 주요 변경점은 정적 메서드와, 디폴트 메서드를 선언 할 수 있다.
- 디폴트 메서드의 출현으로 기존의 배포된 인터페이스에서 수정이 어려운 단점을 극복 할 수 있게 됐다.
- 자바9에서 private 메서드를 선언해 외부에서 접근 불가능한 메서드 또한 선언 할 수 있게 됐다.
- 1.2 예제
interface Foo {
String getName(); // 추상 메서드, 구현하는 클래스에서 무조건 구현해줘야 하는 메서드.
void printName() {
System.out.println(getName());
}
}
---
public class Bar implements Foo {
private String name;
public Bar(String name) { // 생성자
this.name = name;
}
@Override
public String getName() { // 추상 메서드 구현
return this.name;
}
}
---
public class Main {
public static void main(String[] args) {
Foo foo = new Bar("Neo");
foo.printName();
}
}
---
Result
>> Neo
- 위의 예제에서 인터페이스 Foo에 이름을 콘솔에 출력하는 기능을 추가하고 싶다고 가정해보자.
- 이전의 방식으로는 인터페이스에 새로운 printName() 메서드를 추가하고 인터페이스 Foo를 구현한 모든 클래스에서 새로운 메서드를 구현해주어야했다.
* 추상 클래스 vs 인터페이스
- 추상 클래스와 인터페이스는 근본적으로 쓰임이 달라서 비교하는것이 부적절함.
- 사용방법이 비슷한 점과 인터페이스도 클래스의 종류라는점을 생각할때 비교.
* 공통점
- 스스로 new 연산자를 통해 객체를 생성할 수 없다.
- 추상 메서드를 가진다.
- 자손 클래스를 이용해 정의된 추상 메서드들을 구현함.
* 차이점
- 용도, 태생
1. 추상 클래스 : 여러 클래스를 추상화해 공통점을 묶은 추상클래스를 상속받아 그 기능을 사용하거나 확장하기 위함.
2. 인터페이스 : 여러 구현체들의 맥락에 맞는 동일한 동작을 보장하기 위한 명세.
- 다중 상속 가능 여부
1. 추상 클래스 : 다중 상속 불가능
2. 인터페이스 : 다중 상속 가능
- 선언 가능한 메서드
1. 추상 클래스 : 일반 클래스와 동일 하고, 추상 메서드를 선언 할 수 있다.
2. 인터페이스 : 추상 메서드만 선언할 수 있었으나 자바8 부터 디폴트 메서드, 자바9 부터 정적 메서드까지 선언 가능하게 됨.
- 변수와 생성자, 메서드
1. 추상 클래스 : 생성자와 변수, 메서드를 모두 가질 수 있다.
2. 인터페이스 :
- 정적 상수만 가능.
- 위에 언급한것 처럼 자바8 이전까지는 추상 메서드만, 자바9 이전까지는 추상 메서드 + 디폴트 메서드, 그 이후로는 추상메서드 + 디폴트 메서드 + private 메서드만 가질 수 있다.
- 자식 클래스에서의 구현의 강제성
1. 추상 클래스 : 선택적으로 오버라이딩이 가능하다.
2. 인터페이스 :
- 정의된 모든 추상메서드를 구현해야함.
- 디폴트 메서드의 경우 선택적으로 구현 가능.
- 키워드
1. 추상 클래스 : extends
2. 인터페이스 : implements
'Computer Science > JAVA' 카테고리의 다른 글
Java의 Garbage Collection(GC) (0) | 2024.11.22 |
---|---|
Error와 Exception 의 개념 (0) | 2024.11.20 |
Java의 실행 엔진 (0) | 2024.11.20 |
Java의 컴파일 과정 (0) | 2024.11.20 |
컬렉션 프레임 워크 (1) | 2024.11.20 |