good_da22 's devLog

Java

인터페이스(interface)

good_da22 2022. 7. 25. 23:36

인터페이스(interface)


일종의 추상클래스

최고 수준의 추상화 단계로 모든 메서드는 추상 메서드이다.

JDK 8 에서 default method 와 static method 추가

추상 클래스 사용 보단 인터페이스를 주로 사용

오직 추상 메서드상수만을 멤버로 가질 수 있다.

밑그림만 그려진 기본 설계도

다른 클래스를 작성하는데 도움을 주기위해 작성



인터페이스 작성


interfac 인터페이스이름 {
    public static final 타입 멤버이름 = 값;
    public abstract 메서드이름(매개변수);
}

모든 멤버변수는 public static final 상수, 접근제한자 생략 가능

모든 메서드는 public abstract 추상 메서드, 접근제한자 생략 가능



인터페이스 상속


인터페이스는 인터페이스로부터만 extends 키워드를 통해 상속 가능

클래스와 달리 다중 상속 가능

클래스의 Object와 같은 최고 조상이 없다.



인터페이스 구현


class 클래스이름 implements 인터페이스 이름 {
    // 추상 메서드 구현
}

implements 키워드를 통해 구현

인터페이스를 구현하는 클래스는 모든 추상 메서드(abstract meethod) 를 구현

모든 추상 메서드를 구현하지 않는 경우, 해당 클래스를 추상 클래스(abstract class) 로 선언


extends를 통한 상속과 implements를 통한 구현 동시에 가능

여러 개의 인터페이스를 동시에 구현 가능하다.



인터페이스를 통한 다중 상속


'자바도 인터페이스를 이용해 다중상속이 가능하다'

실제로 다중상속을 구현하는 경우는 거의 없다.


인터페이스는 static상수 정의만 가능, 부모 클래스의 멤버변수와 충돌하는 경우는 거의 없으며,

충돌하더라도 클래스 이름을 붙여 구문 가능

추상 메서드는 구현부가 없어 메서드 선언이 일치하는 경우 상속을 받아 문제가 없다.



인터페이스의 필요성


  • 구현의 강제로 표준화 처리
    • 기본 틀을 인터페이스로 작성
    • abstract 메서드 사용
    • 일관되고 정형화된 개발 가능

  • 인터페이스를 통한 간접적인 클래스 사용으로 손쉬운 모듈 교체 지원

  • 서로 상속 관계가 없는 클래스들에게 인터페이스를 통한 관계 부여로 다형성 확장
    • 인터페이스 타입의 참조변수로 인스턴스 참조 가능
    • 인터페이스 타입으로 형변환 가능
    • 메서드의 매개변수 타입으로 사용 가능
      • 메서드 호출시 해당 인터페이스를 구현한 클래스의 인스턴스를 매개변수로 제공해야 한다.
    • 메서드 리턴 타입으로 인터페이스 타입 지정 가능
      • 해당 인터페이스를 구현한 클래스의 인스턴스를 반환해야 한다.

  • 모듈간 독립적 프로그래밍 가능으로 개발 기간 단축
    • 분산환경 프로그래밍에서 위력 발휘



default method


JDK 1.8 부터 default 메서드 등장

접근 제한자 public 생략 가능


동일한 이름을 갖는 구현부가 있는 메서드끼리 충돌 가능

  • 인터페이스 간의 충돌
    • 인터페이스를 구현한 클래스에서 default 메서드를 override 해서 충돌 해결
  • default 메서드와 super 클래스의 메서드 간의 충돌
    • super 클래스 메서드가 상속, default 메서드는 무시

static method


일반 static 메서드와 동일하게 별도의 인스턴스가 필요 없다.

구현체 클래스 없이 인터페이스 이름으로 메서드 접근해 사용 가능

접근 제한자 public 생략 가능

'Java' 카테고리의 다른 글

컬렉션 프레임워크(Collection Framework)  (0) 2022.07.28
예외(Exception) 2  (0) 2022.07.28
예외(Exception) 1  (0) 2022.07.26
제네릭(Generics)  (0) 2022.07.26
추상 클래스(abstract class)  (0) 2022.07.25