Programming/자바(Java)

7-35 인터페이스(interface)

먹보 개발자 2024. 10. 4. 15:37

프로그래밍 관점

- ★추상 메서드의 집합

-구현된 것이 전혀 없는 설계도. 껍데기(모든 멤버가 public)

-인터페이스 조상은 인터페이스만 가능(Object가 최고 조상 아님)

-다중상속 가능(추상 메서드는 충돌해도 문제 없음)

 

어디에쓰는가

-인터페이스에 정의된 추상 메서드를 완성하는것 -> 인터페이스 구현

 

일부만 구현하는 경우, 클래스 앞에 abstract를 붙여야함

 

Q. 추상 클래스와 인터페이스의 공통점은?

 -추상 메서드를 가지고 있다.(미완성 설계도)

 

Q. 추상 클래스와 인터페이스 차이점은?

-인터페이스는 iv를 가질 수 없다.

 

인터페이스를 이용한 다형성

-인터페이스도 구현 클래스의 부모? (엄밀히 말하자면 아니지만 거의 비슷하다)

-인터페이스 타입 매개변수는 인터페이스 구현한 클래스의 객체만 가능

interface Fightable {

    void move(int x, int y);

    void attack(Fightable f);

}

-> Fightable 인터페이스를 구현한 클래스의 인스턴스만 가능

 

-인터페이스를 메서드의 리턴타입으로 지정할 수 있다.

 

인터페이스의 장점

-두 대상(객체) 간의 '연결, 대화, 소통'을 돕는 '중간 역할'을 한다.

-선언(설계)와 구현을 분리시킬 수 있게 한다.

 

인터페이스의 장점

-개발 시간을 단축할 수 있다.

-변경에 유리한 유연한 설계가 가능하다.

-표준화가 가능하다.

-서로 관계없는 클래스들을 관계를 맺어줄 수 있다.

 

디폴트 메서드와 static 메서드

-인터페이스에 디폴트 메서드, static메서드 추가 가능.(JDK 1.8부터)

-인터페이스에 새로운 메서드(추상 메서드)를 추가하기 어려움. 해결책으로서 디폴트 메서드가 나타남

-디폴트 메서드는 인스턴스 메서드(인터페이스 원칙 위반, 예외사항)

-디폴트 메서드가 기존의 메서드와 충돌할 때의 해결책

1. 여러 인터페이스의 디폴트 메서드 간의 충돌

    -인터페이스를 구현한 클래스에서 디폴트 메서드를 오버라이딩해야 한다.

 

2. 디폴트 메서드와 조상 클래스의 메서드 간의 충돌

    -조상클래스의 메서드가 상속되고, 디폴트 메서드는 무시된다.