티스토리 뷰
목표
자바의 인터페이스에 대해 학습하세요.
학습할 것 (필수)
- 인터페이스 정의하는 방법
- 인터페이스 구현하는 방법
- 인터페이스 레퍼런스를 통해 구현체를 사용하는 방법
- 인터페이스 상속
- 인터페이스의 기본 메소드 (Default Method), 자바 8
- 인터페이스의 static 메소드, 자바 8
- (optional) 인터페이스의 private 메소드, 자바 9
인터페이스와 추상 클래스를 사용하는 이유
- 설계시 인터페이스와 추상클래스를 미리 선언해두면 개발시 기능 구현에만 집중할 수 있다. 즉 개발자는 비즈니스 로직에만 집중할 수 있게 된다.
- 공통의 인터페이스와 추상 클래스를 선언해두면, 선언과 구현을 구분할 수 있다.
인터페이스 정의하는 방법
public interface move {
// public static final 생략 가능
public static final int speed = 5;
// public abstract 생략 가능
public abstract void move();
}
- public static final, public abstract 는 생략이 가능하다.
- 편의상 생략하는 경우가 많고, 이는 컴파일 시점에 자동으로 추가해준다.
추상클래스와 인터페이스의 차이점
- 추상클래스의 extends -> 클래스를 확장한다는 의미
- 인터페이스의 implements -> 인터페이스를 구현한다는 의미
인터페이스의 상속
인터페이스는 추상클래스와 다르게 다중 상속이 가능하다.
하지만 아래와 같이 메서드명은 같으나 리턴타입이 다르다면 컴파일 오류가 발생한다.
public class person implements move, move2 {
@Override
public int move() { // 컴파일 오류 발생
}
}
public interface move {
void move();
}
public interface move2 {
int move();
}
그럼 왜 Java에서는 Interface만 다중상속이 가능할까?
하나의 부모클래스(Person)를 구현한 Human1과 Human2가 있다고 생각해보자
Human1과 Human2는 부모인 Person의 메서드를 상속받아 사용할 수 있다.
하지만 2개의 부모클래스 Person1, Person2를 다중 상속 받는다고 하였을 때,
Human1은 Person1과 Person2의 메서드를 사용할 때 동일한 이름의 메서드가 있다면
어떤것을 사용해야할지 컴파일러는 구분할 수 없다. 그렇기 때문에 클래스에서 다중상속을 지원하지 않는다.
하지만 Interface같은 경우에는 메서드를 구현하지 않고 재정의해서 사용하기 때문에
다중상속으로 메서드명이 겹치더라도 두개 다 빈 껍데기의 메서드이기 때문에 문제가 되지 않는다.
그렇기 때문에 Interface는 다중상속을 지원한다.
인터페이스의 기본 메서드 (Default Method) , Static 메서드
원래는 인터페이스에 추상 메서드만 선언할 수 있었는데, JDK 1.8부터 디폴트와 static 메서드를 지원한다.
기본 메서드는 이미 구현한 인터페이스를 수정할 일이 생겼을때
기존에는 인터페이스의 새로운 메서드를 추가하면
이 인터페이스를 구현한 클래스에서 모두 구현을 해주어야 했다. -> 하지 않으면 컴파일에러 발생
이를 해결하고자 기본 메서드가 생겼다.
인스턴스 메서드는 인스턴스 없이 수행할 수 있는 작업을 정의할 수 있는 것이라 볼 수 있다.
기본 메서드 충돌 규칙
- 여러 인터베이스의 기본 메서드 간의 충돌 - 인터페이스를 구현한 클래스에서 기본 메서드를 오버라이딩 해야 한다.
- 기본 메서드와 조상 클래스의 메서드 간의 충돌- 조상 클래스의 매서드가 상속되고, 기본 메서드는 무시된다.
참고
자바의 정석 기초편 - YES24
교육현장에서 뒤쳐지는 학생들을 위해 쓰고, 학생들에게 직접 검증받고 호평받은 책. 코딩을 처음 배우는 사람도 자바를 쉽게 배울수 있게 도와준다.
www.yes24.com
https://junior-datalist.tistory.com/213
[Java] 자바의 다중상속 (feat. 인터페이스와 추상클래스)
알고 시작해야 할 내용 1. 자바에서 클래스의 다중 상속은 불가능하다. 2. 하지만 인터페이스의 다중 상속은 가능하다. why? 인터페이스와 추상클래스를 공부하던 중, 자바의 다중상속 이란 개념
junior-datalist.tistory.com
https://devlog-wjdrbs96.tistory.com/39
[JAVA] 다중 상속(multiple inheritance) 이란?
예전에 자바 공부를 할 때는 다중상속 이라는게 잘 이해가 되지 않아 살짝 두려운 내용이었지만, 지금 자바 공부를 다시 하고 있을 때는 이해가 되어서 글로 정리를 해보려 한다. ( 예전엔 이게
devlog-wjdrbs96.tistory.com
'개발 > Java' 카테고리의 다른 글
| [Java] 예외 처리 (0) | 2023.06.20 |
|---|---|
| [Java] 패키지 (0) | 2023.06.14 |
| [Java] 상속 (0) | 2023.06.08 |
| [Java] 클래스 (0) | 2023.06.07 |
| [Java] 제어문 (0) | 2023.06.05 |