인터페이스에 관한 (내가 헷갈리는 ) 모든 것!
상속관계가 없는 클래스들의 동일한 범위!
추상클래스와 비슷
직접 인스턴스화를 할 수 없다. 구현체가 있어야함!
모든 멤버변수는 public statiic final
모든 메서드는 public abstract
또한 다형성의 원리로 자동 타입변환, 강제 타입변환 둘 다 가능하다.
public class 클래스명 implements 인터페이스명 { }
인터페이스에서는 일반메서드는 default메서드와 static메서드만 정의 가능.
- 디폴트 메서드는 추상메서드의 기본적인 구현을 제공해준다.
메인메서드에서 main.default 메서드명() 이렇게 바로 사용할 수 있다.
- 인터페이스의 static 메서드 또한 객체 없이 호출 가능한데, 메인메서드에서
인터페이스명.static 메서드명() 이렇게 호출 가능하다.
내가 강의 중 가장 헷갈렸던 곳!
- 상속받은 클래스에서 추상클래스의 추상메서드는 반드시 오버라이딩 되어야 한다.
- 인터페이스의 추상메서드는 구현될 때 반드싱 오버라이딩 되어야 한다. 만약 일부만 구현해야 한다면 해당 클래스를 추상클래스로 변경하면 된다.
이 두 문장이다.
결론은! 추상클래스도 인터페이스도 상속받은 클래스에서는 추상메서드를 반드시 재정의하여 구현해야한다. (오버라이딩)
🍄 추상클래스와 인터페이스 비교
공통점
- 객체 생성을 할 수 없다.(인스턴스화 x)
- 추상메서드 포함한다. (구현이 없는 선언부만 가지고 있는)
- 상속받은 클래스에서는 추상메서드를 반드시 재정의하여 구현해야 한다.(오버라이딩)
추상클래스
- 상속받아서 기능을 확장시키는 데 목적
- 클래스다 (abstract class)
- 일반메서드 정의 가능
- 변수 선언 및 사용 가능
- 다중상속 불가능
인터페이스
- 구현 객체의 동일한 실행 기능을 보장하기 위한 목적
- 클래스가 아니다 (interface)
- 일반메서드는 default메서드, static메서드만 정의 가능
- 상수만 사용 가능
- 다중상속 가능
추상클래스가 미완성 설계도라면 인터페이스는 밑그림만 그려진 기본 설계도이다.
추상클래스 안에 원하는 것만 추상 메서드를 여러개 두거나 전부 추상 메서드로 만들게 되면 추상 클래스가 인터페이스 역할을 할 수 있다.
Spring을 배우면서 인터페이스에 대해 더 알게 되는게 생기면 추가하겠음!