728x90
인터페이스
자바는 순수 추상 클래스를 더 편리하게 사용할 수 있는 인터페이스 라는 기능을 제공한다.
순수 추상 클래스 특징
- 인스턴스를 생성할 수 없음
- 상속시 모든 메서드를 오버라이딩 해야 한다.
- 주로 다형성을 위해 사용된다.
인터페이스 특징 (순수 추상 클래스 + 약간의 편의 기능 추가)
- 인터페이스의 메서드는 모두 public, abstract이다.
- 메서드의 public abstract를 생략할 수 있다. 참고로 생략이 권장된다.
- 인터페이스는 다중 구현(다중 상속)을 지원한다.
인터페이스의 멤버 변수
- 인터페이스의 멤버 변수 public, static, final이 모두 포함되어 있다고 간주된다. (수정 불가)
- 생략이 권장된다.
public interface InterfaceAnimal {
public static final int MY_PI = 3.14
}
public interface InterfaceAnimal {
int MY_PI = 3.14
}
클래스 상속 관계는 UML에서 실선을 사용하지만, 인터페이스 구현 관계는 UML에서 점선을 사용한다.
- UML: Unified Modeling Language
순수 추상 클래스가 아닌 인터페이스를 굳이 쓰는 이유?
- 제약: 순수 추상 클래스의 경우 미래에 누군가 메서드를 끼워 넣을 수 있다. 인터페이스는 이를 원천 차단한다.
- 다중 구현: 자바에서 클래스 상속은 부모를 하나만 지정할 수 있다. 인터페이스는 부모를 여러명 두는 다중 구현이 가능하다.
- 참고
자바 8에 등장한 default 메서드를 사용하면 인터페이스도 메서드 구현 가능 - 자바 9에 등장한 private 메서드도 구현가능
- 하지만 이것은 예외적으로 아주 특별한 경우에만 사용해야 함.
인터페이스 - 다중 구현
자바는 다중 상속을 지원하지 않는다.
- 자식 입장에서 어떤 부모의 메서드를 호출할지 애매해짐 (다이아몬드 문제)
- 그리고 다중 상속은 계층 구조가 매우 복잡해질 수 있다.
인터페이스는 다중 상속이 가능
- 자신에서 기능을 직접 구현해야하기 때문에 다이아몬드 문제가 발생하지 않는다.
public class DiamondMain {
public static void main(String[] args) {
InterfaceA a = new Child();
a.methodA();
a.methodCommon();
InterfaceB b = new Child();
b.methodB();
b.methodCommon();
Child child = new Child();
child.methodA();
child.methodB();
child.methodCommon();
}
}
// 실행 결과 //
Child.methodA
Child.methodCommon
Child.methodB
Child.methodCommon
InterfaceB로 정의 된 b는 InterfaceB 인스턴스에 접근해서 자식 Child의 overriding된 메서드를 참조하는구나 !
클래스와 인터페이스 활용
- AbstractAnimal은 추상 클래스
- sound(): 동물 소리 관련 추상 메서드
- move() 동물 이동 관련 메서드. 추상 메서드 x라 상속을 목적으로 사용
- fly는 인터페이스.
- Bird, Chicken은 날 수 있다. fly()메서드를 구현해야 함
하나의 클래스 여러 인터페이스 예시
- extends를 통한 상속은 하나만 할 수 있고 implements를 통한 인터페이스는 다중 구현 할 수 있기 때문에 둘이 함께 나온 경우 extends가 먼저 나와야 한다.
public class Bird extends AbstractAnimal implements Fly, Swim {}
728x90
'프로그래밍 > Java' 카테고리의 다른 글
[실전 자바-기본편] 객체 지향 프로그래밍 (0) | 2024.02.25 |
---|---|
[실전 자바-기본편] 추상 클래스 (0) | 2024.02.24 |
[실전 자바-기본편] 다형성 활용 (0) | 2024.02.24 |
[실전 자바-기본편] 다형성 (0) | 2024.02.21 |
[실전 자바-기본편] 상속 (0) | 2024.02.15 |
댓글